mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-09-02 10:24:01 +02:00
Remove our copy; will use git submodule
This commit is contained in:
459
thirdparty/qtweetlib/qtweetlib/LICENSE
vendored
459
thirdparty/qtweetlib/qtweetlib/LICENSE
vendored
@@ -1,459 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
10
thirdparty/qtweetlib/qtweetlib/QTweetLib.pro
vendored
10
thirdparty/qtweetlib/qtweetlib/QTweetLib.pro
vendored
@@ -1,10 +0,0 @@
|
|||||||
TEMPLATE = subdirs
|
|
||||||
SUBDIRS = sub_qjson sub_src sub_examples
|
|
||||||
|
|
||||||
sub_qjson.subdir = qjson
|
|
||||||
|
|
||||||
sub_src.subdir = src
|
|
||||||
sub_src.depends = sub_qjson
|
|
||||||
|
|
||||||
sub_examples.subdir = examples
|
|
||||||
sub_examples.depends = sub_src
|
|
12
thirdparty/qtweetlib/qtweetlib/README
vendored
12
thirdparty/qtweetlib/qtweetlib/README
vendored
@@ -1,12 +0,0 @@
|
|||||||
- Supports only XAuth protocol (if there is need for PIN based OAuth I will include it)
|
|
||||||
- OAuth tokens must be set in oauth.cpp line 27 and 28 to work properly
|
|
||||||
- Uses QJson library by Flavio Castelli for parsing JSON responses
|
|
||||||
- JSON parsing is done in multithreaded way using QThreadPool
|
|
||||||
- User Streams support is not completed (fetches responses correctly, JSON parsing is not full implemented)
|
|
||||||
|
|
||||||
Requirements and dependencies:
|
|
||||||
- Qt needs to be compiled with OpenSSL support (there are two places where is used https protocol)
|
|
||||||
- You will also need xAuth privilege access to Twitter API ( see http://dev.twitter.com/pages/xauth )
|
|
||||||
- Valid OAuth consumer tokens, put them in oauth.cpp line 27 and 28
|
|
||||||
- If you have already access tokens ( see http://dev.twitter.com/pages/oauth_single_token ) put them directly
|
|
||||||
with OAuthTwitter::setOAuthToken() and OAuthTwitter::setOAuthTokenSecret()
|
|
@@ -1,3 +0,0 @@
|
|||||||
TEMPLATE = subdirs
|
|
||||||
SUBDIRS = search timelines statusupdate geosearch georeverse \
|
|
||||||
followers userstream
|
|
@@ -1,56 +0,0 @@
|
|||||||
import Qt 4.7
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
property string name: "Twitter name"
|
|
||||||
property string screenName: "Twitter screen name"
|
|
||||||
property string description: "Twitter description"
|
|
||||||
property string avatarUrl
|
|
||||||
|
|
||||||
width: ListView.view.width - 1;
|
|
||||||
height: 100
|
|
||||||
radius: 10
|
|
||||||
border.width: 1
|
|
||||||
border.color: "#000000"
|
|
||||||
|
|
||||||
Image {
|
|
||||||
id: avatar
|
|
||||||
anchors.top: parent.top
|
|
||||||
anchors.left: parent.left
|
|
||||||
width: 48; height: 48
|
|
||||||
anchors.leftMargin: 2
|
|
||||||
anchors.topMargin: 2
|
|
||||||
source: avatarUrl
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
id: screenNameText
|
|
||||||
text: screenName
|
|
||||||
anchors.leftMargin: 2
|
|
||||||
anchors.topMargin: 2
|
|
||||||
anchors.left: avatar.right
|
|
||||||
anchors.top: parent.top
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
id: nameText
|
|
||||||
text: name
|
|
||||||
anchors.leftMargin: 2
|
|
||||||
anchors.topMargin: 2
|
|
||||||
anchors.top: screenNameText.bottom
|
|
||||||
anchors.left: avatar.right
|
|
||||||
}
|
|
||||||
|
|
||||||
Text {
|
|
||||||
id: descriptionText
|
|
||||||
text: description
|
|
||||||
anchors.rightMargin: 2
|
|
||||||
anchors.leftMargin: 2
|
|
||||||
anchors.bottomMargin: 2
|
|
||||||
anchors.topMargin: 2
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
anchors.top: avatar.bottom
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.right: parent.right
|
|
||||||
wrapMode: "WordWrap"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,19 +0,0 @@
|
|||||||
import Qt 4.7
|
|
||||||
|
|
||||||
//followersListModel - external
|
|
||||||
|
|
||||||
Item {
|
|
||||||
ListView {
|
|
||||||
id: followersListView
|
|
||||||
width: parent.width; height: parent.height
|
|
||||||
clip: true
|
|
||||||
model: followersListModel
|
|
||||||
delegate: FollowerDelegate {
|
|
||||||
id: followerDelegate
|
|
||||||
name: nameRole
|
|
||||||
screenName: screenNameRole
|
|
||||||
description: descriptionRole
|
|
||||||
avatarUrl: avatarRole
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,67 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "followers.h"
|
|
||||||
#include "ui_followers.h"
|
|
||||||
#include <QDeclarativeContext>
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include "followerslistmodel.h"
|
|
||||||
#include "oauthtwitter.h"
|
|
||||||
|
|
||||||
Followers::Followers(QWidget *parent) :
|
|
||||||
QWidget(parent),
|
|
||||||
ui(new Ui::Followers)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
|
|
||||||
m_oauthTwitter = new OAuthTwitter(this);
|
|
||||||
m_oauthTwitter->setNetworkAccessManager(new QNetworkAccessManager(this));
|
|
||||||
m_oauthTwitter->setOAuthToken("");
|
|
||||||
m_oauthTwitter->setOAuthTokenSecret("");
|
|
||||||
|
|
||||||
m_followersListModel = new FollowersListModel(m_oauthTwitter, this);
|
|
||||||
|
|
||||||
ui->declarativeView->rootContext()->setContextProperty("followersListModel", m_followersListModel);
|
|
||||||
ui->declarativeView->setSource(QUrl("qrc:/FollowersList.qml"));
|
|
||||||
|
|
||||||
connect(ui->fetchFollowersPushButton, SIGNAL(clicked()), SLOT(onFetchFollowersPushButtonClicked()));
|
|
||||||
}
|
|
||||||
|
|
||||||
Followers::~Followers()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Followers::changeEvent(QEvent *e)
|
|
||||||
{
|
|
||||||
QWidget::changeEvent(e);
|
|
||||||
switch (e->type()) {
|
|
||||||
case QEvent::LanguageChange:
|
|
||||||
ui->retranslateUi(this);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Followers::onFetchFollowersPushButtonClicked()
|
|
||||||
{
|
|
||||||
m_followersListModel->fetchFollowers();
|
|
||||||
}
|
|
@@ -1,53 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FOLLOWERS_H
|
|
||||||
#define FOLLOWERS_H
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
class OAuthTwitter;
|
|
||||||
class FollowersListModel;
|
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class Followers;
|
|
||||||
}
|
|
||||||
|
|
||||||
class Followers : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit Followers(QWidget *parent = 0);
|
|
||||||
~Followers();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void changeEvent(QEvent *e);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void onFetchFollowersPushButtonClicked();
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::Followers *ui;
|
|
||||||
OAuthTwitter *m_oauthTwitter;
|
|
||||||
FollowersListModel *m_followersListModel;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // FOLLOWERS_H
|
|
@@ -1,25 +0,0 @@
|
|||||||
QT += core gui network declarative
|
|
||||||
|
|
||||||
TARGET = followers
|
|
||||||
TEMPLATE = app
|
|
||||||
win32:LIBS += ../../lib/QTweetLib.lib
|
|
||||||
INCLUDEPATH += ../../src
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
main.cpp \
|
|
||||||
followers.cpp \
|
|
||||||
followerslistmodel.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
followers.h \
|
|
||||||
followerslistmodel.h
|
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
followers.ui
|
|
||||||
|
|
||||||
OTHER_FILES += \
|
|
||||||
FollowerDelegate.qml \
|
|
||||||
FollowersList.qml
|
|
||||||
|
|
||||||
RESOURCES += \
|
|
||||||
followers.qrc
|
|
@@ -1,6 +0,0 @@
|
|||||||
<RCC>
|
|
||||||
<qresource prefix="/">
|
|
||||||
<file>FollowerDelegate.qml</file>
|
|
||||||
<file>FollowersList.qml</file>
|
|
||||||
</qresource>
|
|
||||||
</RCC>
|
|
@@ -1,42 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>Followers</class>
|
|
||||||
<widget class="QWidget" name="Followers">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>400</width>
|
|
||||||
<height>300</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Form</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QDeclarativeView" name="declarativeView">
|
|
||||||
<property name="resizeMode">
|
|
||||||
<enum>QDeclarativeView::SizeRootObjectToView</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QPushButton" name="fetchFollowersPushButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Fetch Followers</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<customwidgets>
|
|
||||||
<customwidget>
|
|
||||||
<class>QDeclarativeView</class>
|
|
||||||
<extends>QGraphicsView</extends>
|
|
||||||
<header>QtDeclarative/QDeclarativeView</header>
|
|
||||||
</customwidget>
|
|
||||||
</customwidgets>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
@@ -1,113 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "followerslistmodel.h"
|
|
||||||
#include "oauthtwitter.h"
|
|
||||||
#include "qtweetuser.h"
|
|
||||||
#include "qtweetuserstatusesfollowers.h"
|
|
||||||
|
|
||||||
FollowersListModel::FollowersListModel(QObject *parent) :
|
|
||||||
QAbstractListModel(parent)
|
|
||||||
{
|
|
||||||
QHash<int, QByteArray> roles;
|
|
||||||
roles[NameRole] = "nameRole";
|
|
||||||
roles[ScreenNameRole] = "screenNameRole";
|
|
||||||
roles[DescriptionRole] = "descriptionRole";
|
|
||||||
roles[AvatarRole] = "avatarRole";
|
|
||||||
setRoleNames(roles);
|
|
||||||
}
|
|
||||||
|
|
||||||
FollowersListModel::FollowersListModel(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QAbstractListModel(parent)
|
|
||||||
{
|
|
||||||
QHash<int, QByteArray> roles;
|
|
||||||
roles[NameRole] = "nameRole";
|
|
||||||
roles[ScreenNameRole] = "screenNameRole";
|
|
||||||
roles[DescriptionRole] = "descriptionRole";
|
|
||||||
roles[AvatarRole] = "avatarRole";
|
|
||||||
setRoleNames(roles);
|
|
||||||
|
|
||||||
m_oauthTwitter = oauthTwitter;
|
|
||||||
}
|
|
||||||
|
|
||||||
void FollowersListModel::setOAuthTwitter(OAuthTwitter *oauthTwitter)
|
|
||||||
{
|
|
||||||
m_oauthTwitter = oauthTwitter;
|
|
||||||
}
|
|
||||||
|
|
||||||
int FollowersListModel::rowCount(const QModelIndex &parent) const
|
|
||||||
{
|
|
||||||
Q_UNUSED(parent);
|
|
||||||
return m_users.count();
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant FollowersListModel::data(const QModelIndex &index, int role) const
|
|
||||||
{
|
|
||||||
if (index.row() < 0 || index.row() > m_users.count())
|
|
||||||
return QVariant();
|
|
||||||
|
|
||||||
const QTweetUser &user = m_users.at(index.row());
|
|
||||||
|
|
||||||
if (role == NameRole)
|
|
||||||
return user.name();
|
|
||||||
else if (role == ScreenNameRole)
|
|
||||||
return user.screenName();
|
|
||||||
else if (role == DescriptionRole)
|
|
||||||
return user.description();
|
|
||||||
else if (role == AvatarRole)
|
|
||||||
return user.profileImageUrl();
|
|
||||||
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
|
|
||||||
void FollowersListModel::fetchFollowers(const QString &cursor)
|
|
||||||
{
|
|
||||||
if (cursor == "-1") {
|
|
||||||
beginResetModel();
|
|
||||||
m_users.clear();
|
|
||||||
endResetModel();
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetUserStatusesFollowers *followers = new QTweetUserStatusesFollowers;
|
|
||||||
followers->setOAuthTwitter(m_oauthTwitter);
|
|
||||||
followers->fetch(0, cursor, false);
|
|
||||||
connect(followers, SIGNAL(parsedFollowersList(QList<QTweetUser>,QString)),
|
|
||||||
this, SLOT(followersFinished(QList<QTweetUser>,QString)));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void FollowersListModel::followersFinished(const QList<QTweetUser> &followers, const QString &nextCursor)
|
|
||||||
{
|
|
||||||
QTweetUserStatusesFollowers *users = qobject_cast<QTweetUserStatusesFollowers*>(sender());
|
|
||||||
|
|
||||||
if (users) {
|
|
||||||
beginInsertRows(QModelIndex(), m_users.count(), m_users.count() + followers.count());
|
|
||||||
m_users.append(followers);
|
|
||||||
endInsertRows();
|
|
||||||
|
|
||||||
if (nextCursor == "0")
|
|
||||||
return;
|
|
||||||
|
|
||||||
//continue fetchingg next page
|
|
||||||
fetchFollowers(nextCursor);
|
|
||||||
|
|
||||||
users->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,56 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef FOLLOWERSLISTMODEL_H
|
|
||||||
#define FOLLOWERSLISTMODEL_H
|
|
||||||
|
|
||||||
#include <QAbstractListModel>
|
|
||||||
|
|
||||||
class OAuthTwitter;
|
|
||||||
class QTweetUser;
|
|
||||||
|
|
||||||
class FollowersListModel : public QAbstractListModel
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
enum Roles {
|
|
||||||
NameRole = Qt::UserRole + 1,
|
|
||||||
ScreenNameRole,
|
|
||||||
DescriptionRole,
|
|
||||||
AvatarRole
|
|
||||||
};
|
|
||||||
|
|
||||||
FollowersListModel(QObject *parent = 0);
|
|
||||||
FollowersListModel(OAuthTwitter *oauthTwitter, QObject *parent = 0);
|
|
||||||
void setOAuthTwitter(OAuthTwitter *oauthTwitter);
|
|
||||||
int rowCount(const QModelIndex &parent) const;
|
|
||||||
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
|
|
||||||
void fetchFollowers(const QString& cursor = QString("-1"));
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void followersFinished(const QList<QTweetUser>& followers,
|
|
||||||
const QString& nextCursor);
|
|
||||||
|
|
||||||
private:
|
|
||||||
OAuthTwitter *m_oauthTwitter;
|
|
||||||
QList<QTweetUser> m_users;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // FOLLOWERSLISTMODEL_H
|
|
@@ -1,32 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <QtGui/QApplication>
|
|
||||||
#include "followers.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
Followers w;
|
|
||||||
w.show();
|
|
||||||
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
@@ -1,106 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include "oauthtwitter.h"
|
|
||||||
#include "qtweetplace.h"
|
|
||||||
#include "qtweetgeocoord.h"
|
|
||||||
#include "qtweetgeoreversegeocode.h"
|
|
||||||
#include "georeverse.h"
|
|
||||||
#include "ui_georeverse.h"
|
|
||||||
|
|
||||||
GeoReverse::GeoReverse(QWidget *parent) :
|
|
||||||
QWidget(parent),
|
|
||||||
ui(new Ui::GeoReverse)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
|
|
||||||
m_oauthTwitter = new OAuthTwitter(this);
|
|
||||||
m_oauthTwitter->setNetworkAccessManager(new QNetworkAccessManager(this));
|
|
||||||
m_oauthTwitter->setOAuthToken("");
|
|
||||||
m_oauthTwitter->setOAuthTokenSecret("");
|
|
||||||
|
|
||||||
QDoubleValidator *latValidator = new QDoubleValidator(ui->latitudeLineEdit);
|
|
||||||
latValidator->setNotation(QDoubleValidator::StandardNotation);
|
|
||||||
ui->latitudeLineEdit->setValidator(latValidator);
|
|
||||||
|
|
||||||
QDoubleValidator *longValidator = new QDoubleValidator(ui->longitudeLineEdit);
|
|
||||||
longValidator->setNotation(QDoubleValidator::StandardNotation);
|
|
||||||
ui->longitudeLineEdit->setValidator(longValidator);
|
|
||||||
|
|
||||||
connect(ui->searchPushButton, SIGNAL(clicked()), SLOT(onSearchPushButtonClicked()));
|
|
||||||
}
|
|
||||||
|
|
||||||
GeoReverse::~GeoReverse()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GeoReverse::changeEvent(QEvent *e)
|
|
||||||
{
|
|
||||||
QWidget::changeEvent(e);
|
|
||||||
switch (e->type()) {
|
|
||||||
case QEvent::LanguageChange:
|
|
||||||
ui->retranslateUi(this);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void GeoReverse::onSearchPushButtonClicked()
|
|
||||||
{
|
|
||||||
QTweetGeoReverseGeoCode *reverseGeo = new QTweetGeoReverseGeoCode(m_oauthTwitter, this);
|
|
||||||
reverseGeo->getPlaces(QTweetGeoCoord(ui->latitudeLineEdit->text().toDouble(),
|
|
||||||
ui->longitudeLineEdit->text().toDouble()));
|
|
||||||
connect(reverseGeo, SIGNAL(parsedPlaces(QList<QTweetPlace>)), SLOT(reverseGeoFinished(QList<QTweetPlace>)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void GeoReverse::reverseGeoFinished(const QList<QTweetPlace> &places)
|
|
||||||
{
|
|
||||||
QTweetGeoReverseGeoCode *reverseGeo = qobject_cast<QTweetGeoReverseGeoCode*>(sender());
|
|
||||||
|
|
||||||
if (reverseGeo) {
|
|
||||||
ui->tableWidget->clear();
|
|
||||||
ui->tableWidget->setRowCount(places.count());
|
|
||||||
ui->tableWidget->setColumnCount(4);
|
|
||||||
|
|
||||||
int row = 0;
|
|
||||||
foreach (const QTweetPlace& place, places) {
|
|
||||||
QTableWidgetItem *fullname = new QTableWidgetItem(place.fullName());
|
|
||||||
ui->tableWidget->setItem(row, 0, fullname);
|
|
||||||
QTableWidgetItem *placeid = new QTableWidgetItem(place.id());
|
|
||||||
ui->tableWidget->setItem(row, 1, placeid);
|
|
||||||
|
|
||||||
//QGeoBoundingBox bb = place.boundingBox();
|
|
||||||
//QGeoCoordinate coord = bb.center();
|
|
||||||
|
|
||||||
//approximate, just shows center of the box
|
|
||||||
//QTableWidgetItem *lat = new QTableWidgetItem(QString::number(coord.latitude()));
|
|
||||||
//ui->tableWidget->setItem(row, 2, lat);
|
|
||||||
//QTableWidgetItem *longit = new QTableWidgetItem(QString::number(coord.longitude()));
|
|
||||||
//ui->tableWidget->setItem(row, 3, longit);
|
|
||||||
//++row;
|
|
||||||
}
|
|
||||||
|
|
||||||
reverseGeo->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,54 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef GEOREVERSE_H
|
|
||||||
#define GEOREVERSE_H
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class GeoReverse;
|
|
||||||
}
|
|
||||||
|
|
||||||
class OAuthTwitter;
|
|
||||||
class QTweetPlace;
|
|
||||||
|
|
||||||
class GeoReverse : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit GeoReverse(QWidget *parent = 0);
|
|
||||||
~GeoReverse();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void changeEvent(QEvent *e);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void onSearchPushButtonClicked();
|
|
||||||
void reverseGeoFinished(const QList<QTweetPlace>& places);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::GeoReverse *ui;
|
|
||||||
OAuthTwitter *m_oauthTwitter;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // GEOREVERSE_H
|
|
@@ -1,18 +0,0 @@
|
|||||||
QT += core gui network
|
|
||||||
|
|
||||||
TARGET = georeverse
|
|
||||||
TEMPLATE = app
|
|
||||||
win32:LIBS += ../../lib/QTweetLib.lib
|
|
||||||
INCLUDEPATH += ../../src
|
|
||||||
CONFIG += mobility
|
|
||||||
MOBILITY += location
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
main.cpp \
|
|
||||||
georeverse.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
georeverse.h
|
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
georeverse.ui
|
|
@@ -1,51 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>GeoReverse</class>
|
|
||||||
<widget class="QWidget" name="GeoReverse">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>598</width>
|
|
||||||
<height>506</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Form</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
|
||||||
<item row="0" column="0" colspan="5">
|
|
||||||
<widget class="QTableWidget" name="tableWidget"/>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Latitude</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QLineEdit" name="latitudeLineEdit"/>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2">
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Longitude</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="3">
|
|
||||||
<widget class="QLineEdit" name="longitudeLineEdit"/>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="4">
|
|
||||||
<widget class="QPushButton" name="searchPushButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Reverse geosearch</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
@@ -1,32 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <QtGui/QApplication>
|
|
||||||
#include "georeverse.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
GeoReverse w;
|
|
||||||
w.show();
|
|
||||||
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
@@ -1,102 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include <QDoubleValidator>
|
|
||||||
#include "oauthtwitter.h"
|
|
||||||
#include "qtweetplace.h"
|
|
||||||
#include "qtweetgeosearch.h"
|
|
||||||
#include "geosearch.h"
|
|
||||||
#include "qtweetgeocoord.h"
|
|
||||||
#include "ui_geosearch.h"
|
|
||||||
|
|
||||||
GeoSearch::GeoSearch(QWidget *parent) :
|
|
||||||
QWidget(parent),
|
|
||||||
ui(new Ui::GeoSearch)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
|
|
||||||
m_oauthTwitter = new OAuthTwitter(this);
|
|
||||||
m_oauthTwitter->setNetworkAccessManager(new QNetworkAccessManager(this));
|
|
||||||
m_oauthTwitter->setOAuthToken("");
|
|
||||||
m_oauthTwitter->setOAuthTokenSecret("");
|
|
||||||
|
|
||||||
QDoubleValidator *latValidator = new QDoubleValidator(ui->latitudeLineEdit);
|
|
||||||
latValidator->setNotation(QDoubleValidator::StandardNotation);
|
|
||||||
ui->latitudeLineEdit->setValidator(latValidator);
|
|
||||||
|
|
||||||
QDoubleValidator *longValidator = new QDoubleValidator(ui->longitudeLineEdit);
|
|
||||||
longValidator->setNotation(QDoubleValidator::StandardNotation);
|
|
||||||
ui->longitudeLineEdit->setValidator(longValidator);
|
|
||||||
|
|
||||||
connect(ui->searchPushButton, SIGNAL(clicked()), SLOT(onSearchPushButtonClicked()));
|
|
||||||
}
|
|
||||||
|
|
||||||
GeoSearch::~GeoSearch()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
void GeoSearch::changeEvent(QEvent *e)
|
|
||||||
{
|
|
||||||
QWidget::changeEvent(e);
|
|
||||||
switch (e->type()) {
|
|
||||||
case QEvent::LanguageChange:
|
|
||||||
ui->retranslateUi(this);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void GeoSearch::onSearchPushButtonClicked()
|
|
||||||
{
|
|
||||||
QTweetGeoSearch *geoSearch = new QTweetGeoSearch(m_oauthTwitter, this);
|
|
||||||
QTweetGeoCoord latLong;
|
|
||||||
latLong.setLatitude(ui->latitudeLineEdit->text().toDouble());
|
|
||||||
latLong.setLongitude(ui->longitudeLineEdit->text().toDouble());
|
|
||||||
|
|
||||||
geoSearch->search(latLong);
|
|
||||||
connect(geoSearch, SIGNAL(parsedPlaces(QList<QTweetPlace>)), SLOT(searchPlacesFinished(QList<QTweetPlace>)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void GeoSearch::searchPlacesFinished(const QList<QTweetPlace> &places)
|
|
||||||
{
|
|
||||||
QTweetGeoSearch *geoSearch = qobject_cast<QTweetGeoSearch*>(sender());
|
|
||||||
|
|
||||||
if (geoSearch) {
|
|
||||||
ui->tableWidget->clear();
|
|
||||||
ui->tableWidget->setRowCount(places.count());
|
|
||||||
ui->tableWidget->setColumnCount(2);
|
|
||||||
|
|
||||||
int row = 0;
|
|
||||||
foreach (const QTweetPlace& place, places) {
|
|
||||||
QTableWidgetItem *fullname = new QTableWidgetItem(place.fullName());
|
|
||||||
ui->tableWidget->setItem(row, 0, fullname);
|
|
||||||
QTableWidgetItem *placeid = new QTableWidgetItem(place.id());
|
|
||||||
ui->tableWidget->setItem(row, 1, placeid);
|
|
||||||
|
|
||||||
++row;
|
|
||||||
}
|
|
||||||
|
|
||||||
geoSearch->deleteLater();
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,53 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef GEOSEARCH_H
|
|
||||||
#define GEOSEARCH_H
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class GeoSearch;
|
|
||||||
}
|
|
||||||
|
|
||||||
class OAuthTwitter;
|
|
||||||
class QTweetPlace;
|
|
||||||
|
|
||||||
class GeoSearch : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit GeoSearch(QWidget *parent = 0);
|
|
||||||
~GeoSearch();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void changeEvent(QEvent *e);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void onSearchPushButtonClicked();
|
|
||||||
void searchPlacesFinished(const QList<QTweetPlace>& places);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::GeoSearch *ui;
|
|
||||||
OAuthTwitter *m_oauthTwitter;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // GEOSEARCH_H
|
|
@@ -1,18 +0,0 @@
|
|||||||
QT += core gui network
|
|
||||||
|
|
||||||
TARGET = geosearch
|
|
||||||
TEMPLATE = app
|
|
||||||
win32:LIBS += ../../lib/QTweetLib.lib
|
|
||||||
INCLUDEPATH += ../../src
|
|
||||||
CONFIG += mobility
|
|
||||||
MOBILITY += location
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
main.cpp \
|
|
||||||
geosearch.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
geosearch.h
|
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
geosearch.ui
|
|
@@ -1,55 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>GeoSearch</class>
|
|
||||||
<widget class="QWidget" name="GeoSearch">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>616</width>
|
|
||||||
<height>434</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Form</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
|
||||||
<item row="0" column="0" colspan="5">
|
|
||||||
<widget class="QTableWidget" name="tableWidget">
|
|
||||||
<property name="alternatingRowColors">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Latitude</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QLineEdit" name="latitudeLineEdit"/>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2">
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Longitude</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="3">
|
|
||||||
<widget class="QLineEdit" name="longitudeLineEdit"/>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="4">
|
|
||||||
<widget class="QPushButton" name="searchPushButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Search</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
@@ -1,32 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <QtGui/QApplication>
|
|
||||||
#include "geosearch.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
GeoSearch w;
|
|
||||||
w.show();
|
|
||||||
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
@@ -1,31 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtGui/QApplication>
|
|
||||||
#include "mainwindow.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
MainWindow w;
|
|
||||||
w.show();
|
|
||||||
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
@@ -1,100 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include <QDateTime>
|
|
||||||
#include "mainwindow.h"
|
|
||||||
#include "ui_mainwindow.h"
|
|
||||||
#include "oauthtwitter.h"
|
|
||||||
#include "qtweetsearch.h"
|
|
||||||
#include "qtweetsearchpageresults.h"
|
|
||||||
#include "qtweetsearchresult.h"
|
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent) :
|
|
||||||
QMainWindow(parent),
|
|
||||||
ui(new Ui::MainWindow)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
|
|
||||||
m_oauthTwitter = new OAuthTwitter(this);
|
|
||||||
m_oauthTwitter->setNetworkAccessManager(new QNetworkAccessManager(this));
|
|
||||||
|
|
||||||
connect(ui->startSearchButton, SIGNAL(clicked()), this, SLOT(searchButtonClicked()));
|
|
||||||
}
|
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::searchButtonClicked()
|
|
||||||
{
|
|
||||||
QTweetSearch *twitSearch = new QTweetSearch(m_oauthTwitter, m_oauthTwitter);
|
|
||||||
twitSearch->setAuthenticationEnabled(false);
|
|
||||||
twitSearch->start(ui->queryLineEdit->text());
|
|
||||||
connect(twitSearch, SIGNAL(parsedPageResults(QTweetSearchPageResults)),
|
|
||||||
this, SLOT(finishedSearch(QTweetSearchPageResults)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::finishedSearch(const QTweetSearchPageResults &results)
|
|
||||||
{
|
|
||||||
QTweetSearch *twitSearch = qobject_cast<QTweetSearch*>(sender());
|
|
||||||
|
|
||||||
if (twitSearch) {
|
|
||||||
ui->resultsTextEdit->append("maxid: " + QString::number(results.maxid()));
|
|
||||||
ui->resultsTextEdit->append("next page: " + results.nextPage());
|
|
||||||
ui->resultsTextEdit->append("page: " + QString::number(results.page()));
|
|
||||||
ui->resultsTextEdit->append("query: " + results.query());
|
|
||||||
ui->resultsTextEdit->append("refresh url: " + results.refreshUrl());
|
|
||||||
ui->resultsTextEdit->append("rpp: " + QString::number(results.resultsPerPage()));
|
|
||||||
ui->resultsTextEdit->append("sinceid: " + QString::number(results.sinceid()));
|
|
||||||
ui->resultsTextEdit->append("total: " + QString::number(results.total()));
|
|
||||||
|
|
||||||
QList<QTweetSearchResult> listResults = results.results();
|
|
||||||
|
|
||||||
ui->resultsTextEdit->append("results: \n");
|
|
||||||
|
|
||||||
foreach (const QTweetSearchResult& singleResult, listResults) {
|
|
||||||
ui->resultsTextEdit->append("created: " + singleResult.createdAt().toString());
|
|
||||||
ui->resultsTextEdit->append("from user: " + singleResult.fromUser());
|
|
||||||
ui->resultsTextEdit->append("id: " + QString::number(singleResult.id()));
|
|
||||||
ui->resultsTextEdit->append("lang: " + singleResult.lang());
|
|
||||||
ui->resultsTextEdit->append("avatar url: " + singleResult.profileImageUrl());
|
|
||||||
ui->resultsTextEdit->append("source: " + singleResult.source());
|
|
||||||
ui->resultsTextEdit->append("text: " + singleResult.text());
|
|
||||||
ui->resultsTextEdit->append("to user: " + singleResult.toUser());
|
|
||||||
ui->resultsTextEdit->append("-------");
|
|
||||||
}
|
|
||||||
|
|
||||||
twitSearch->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::changeEvent(QEvent *e)
|
|
||||||
{
|
|
||||||
QMainWindow::changeEvent(e);
|
|
||||||
switch (e->type()) {
|
|
||||||
case QEvent::LanguageChange:
|
|
||||||
ui->retranslateUi(this);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,53 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MAINWINDOW_H
|
|
||||||
#define MAINWINDOW_H
|
|
||||||
|
|
||||||
#include <QMainWindow>
|
|
||||||
|
|
||||||
class OAuthTwitter;
|
|
||||||
class QTweetSearchPageResults;
|
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class MainWindow;
|
|
||||||
}
|
|
||||||
|
|
||||||
class MainWindow : public QMainWindow
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit MainWindow(QWidget *parent = 0);
|
|
||||||
~MainWindow();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void changeEvent(QEvent *e);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void searchButtonClicked();
|
|
||||||
void finishedSearch(const QTweetSearchPageResults& results);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::MainWindow *ui;
|
|
||||||
OAuthTwitter* m_oauthTwitter;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
|
@@ -1,64 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>MainWindow</class>
|
|
||||||
<widget class="QMainWindow" name="MainWindow">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>621</width>
|
|
||||||
<height>600</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>MainWindow</string>
|
|
||||||
</property>
|
|
||||||
<widget class="QWidget" name="centralwidget">
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QTextEdit" name="resultsTextEdit">
|
|
||||||
<property name="textInteractionFlags">
|
|
||||||
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Query:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="queryLineEdit"/>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="horizontalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="startSearchButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Search</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
@@ -1,17 +0,0 @@
|
|||||||
QT += core gui network
|
|
||||||
|
|
||||||
TARGET = searchexample
|
|
||||||
TEMPLATE = app
|
|
||||||
win32:LIBS += ../../lib/QTweetLib.lib
|
|
||||||
INCLUDEPATH += ../../src
|
|
||||||
|
|
||||||
SOURCES +=\
|
|
||||||
mainwindow.cpp \
|
|
||||||
main.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
mainwindow.h
|
|
||||||
|
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
mainwindow.ui
|
|
@@ -1,32 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <QtGui/QApplication>
|
|
||||||
#include "mainwindow.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
MainWindow w;
|
|
||||||
w.show();
|
|
||||||
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
@@ -1,117 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include <QDoubleValidator>
|
|
||||||
#include "mainwindow.h"
|
|
||||||
#include "ui_mainwindow.h"
|
|
||||||
#include "oauthtwitter.h"
|
|
||||||
#include "qtweetstatusupdate.h"
|
|
||||||
#include "qtweetstatus.h"
|
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent) :
|
|
||||||
QMainWindow(parent),
|
|
||||||
ui(new Ui::MainWindow)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
|
|
||||||
//m_authorized = false;
|
|
||||||
|
|
||||||
QDoubleValidator *latValidator = new QDoubleValidator(ui->latLineEdit);
|
|
||||||
latValidator->setNotation(QDoubleValidator::StandardNotation);
|
|
||||||
ui->latLineEdit->setValidator(latValidator);
|
|
||||||
|
|
||||||
QDoubleValidator *longValidator = new QDoubleValidator(ui->longLineEdit);
|
|
||||||
longValidator->setNotation(QDoubleValidator::StandardNotation);
|
|
||||||
ui->longLineEdit->setValidator(longValidator);
|
|
||||||
|
|
||||||
m_oauthTwitter = new OAuthTwitter(this);
|
|
||||||
m_oauthTwitter->setNetworkAccessManager(new QNetworkAccessManager(this));
|
|
||||||
connect(m_oauthTwitter, SIGNAL(authorizeXAuthFinished()), SLOT(xauthFinished()));
|
|
||||||
connect(m_oauthTwitter, SIGNAL(authorizeXAuthError()), SLOT(xauthError()));
|
|
||||||
|
|
||||||
connect(ui->authPushButton, SIGNAL(clicked()), SLOT(authorizeButtonClicked()));
|
|
||||||
connect(ui->udpatePushButton, SIGNAL(clicked()), SLOT(updateButtonClicked()));
|
|
||||||
|
|
||||||
m_authorized = true;
|
|
||||||
m_oauthTwitter->setOAuthToken("16290455-CPyk9D9hJoCghpw7zAE73IZ0g0XtbVHU7xbI5RJE2");
|
|
||||||
m_oauthTwitter->setOAuthTokenSecret("NMCzZHio4YAB1ZrTsNP35HLHeN4Ze1GI3qT4zvMCctQ");
|
|
||||||
}
|
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::changeEvent(QEvent *e)
|
|
||||||
{
|
|
||||||
QMainWindow::changeEvent(e);
|
|
||||||
switch (e->type()) {
|
|
||||||
case QEvent::LanguageChange:
|
|
||||||
ui->retranslateUi(this);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::authorizeButtonClicked()
|
|
||||||
{
|
|
||||||
m_oauthTwitter->authorizeXAuth(ui->userNameLineEdit->text(), ui->passwordLineEdit->text());
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::xauthFinished()
|
|
||||||
{
|
|
||||||
ui->statusbar->showMessage("XAuth succesfull!");
|
|
||||||
m_authorized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::xauthError()
|
|
||||||
{
|
|
||||||
ui->statusbar->showMessage("XAuth failed");
|
|
||||||
m_authorized = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::updateButtonClicked()
|
|
||||||
{
|
|
||||||
if (m_authorized) {
|
|
||||||
QTweetStatusUpdate *statusUpdate = new QTweetStatusUpdate(m_oauthTwitter, this);
|
|
||||||
statusUpdate->post(ui->statusTextEdit->toPlainText(),
|
|
||||||
0,
|
|
||||||
QTweetGeoCoord(ui->latLineEdit->text().toDouble(), ui->longLineEdit->text().toDouble()),
|
|
||||||
QString(),
|
|
||||||
true);
|
|
||||||
connect(statusUpdate, SIGNAL(postedStatus(QTweetStatus)), SLOT(postStatusFinished(QTweetStatus)));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
ui->statusbar->showMessage("You cannot post, needs autorization!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::postStatusFinished(const QTweetStatus &status)
|
|
||||||
{
|
|
||||||
QTweetStatusUpdate *statusUpdate = qobject_cast<QTweetStatusUpdate*>(sender());
|
|
||||||
|
|
||||||
if (statusUpdate) {
|
|
||||||
ui->statusbar->showMessage("Posted status with id " + QString::number(status.id()));
|
|
||||||
|
|
||||||
statusUpdate->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,57 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MAINWINDOW_H
|
|
||||||
#define MAINWINDOW_H
|
|
||||||
|
|
||||||
#include <QMainWindow>
|
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class MainWindow;
|
|
||||||
}
|
|
||||||
|
|
||||||
class OAuthTwitter;
|
|
||||||
class QTweetStatus;
|
|
||||||
|
|
||||||
class MainWindow : public QMainWindow
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit MainWindow(QWidget *parent = 0);
|
|
||||||
~MainWindow();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void changeEvent(QEvent *e);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void authorizeButtonClicked();
|
|
||||||
void xauthFinished();
|
|
||||||
void xauthError();
|
|
||||||
void updateButtonClicked();
|
|
||||||
void postStatusFinished(const QTweetStatus& status);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::MainWindow *ui;
|
|
||||||
OAuthTwitter *m_oauthTwitter;
|
|
||||||
bool m_authorized;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
|
@@ -1,206 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>MainWindow</class>
|
|
||||||
<widget class="QMainWindow" name="MainWindow">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>541</width>
|
|
||||||
<height>287</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>MainWindow</string>
|
|
||||||
</property>
|
|
||||||
<widget class="QWidget" name="centralwidget">
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
|
||||||
<item>
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Username:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="userNameLineEdit"/>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<spacer name="horizontalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Password:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="passwordLineEdit">
|
|
||||||
<property name="echoMode">
|
|
||||||
<enum>QLineEdit::Password</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QPushButton" name="authPushButton">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>70</width>
|
|
||||||
<height>16777215</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Authorize</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_5">
|
|
||||||
<property name="text">
|
|
||||||
<string>Status text:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="horizontalSpacer_2">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPlainTextEdit" name="statusTextEdit">
|
|
||||||
<property name="maximumSize">
|
|
||||||
<size>
|
|
||||||
<width>16777215</width>
|
|
||||||
<height>128</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_3">
|
|
||||||
<property name="text">
|
|
||||||
<string>Latitude:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="latLineEdit"/>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<spacer name="horizontalSpacer_4">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_4">
|
|
||||||
<property name="text">
|
|
||||||
<string>Longitude:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="longLineEdit"/>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<spacer name="horizontalSpacer_5">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="udpatePushButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Update</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="horizontalSpacer_3">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QStatusBar" name="statusbar"/>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
@@ -1,16 +0,0 @@
|
|||||||
QT += core gui network
|
|
||||||
|
|
||||||
TARGET = statusupdate
|
|
||||||
TEMPLATE = app
|
|
||||||
win32:LIBS += ../../lib/QTweetLib.lib
|
|
||||||
INCLUDEPATH += ../../src
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
main.cpp \
|
|
||||||
mainwindow.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
mainwindow.h
|
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
mainwindow.ui
|
|
@@ -1,32 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include <QtGui/QApplication>
|
|
||||||
#include "mainwindow.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
MainWindow w;
|
|
||||||
w.show();
|
|
||||||
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
@@ -1,224 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include <QTimer>
|
|
||||||
#include <QDateTime>
|
|
||||||
#include "mainwindow.h"
|
|
||||||
#include "ui_mainwindow.h"
|
|
||||||
#include "oauthtwitter.h"
|
|
||||||
#include "qtweethometimeline.h"
|
|
||||||
#include "qtweetmentions.h"
|
|
||||||
#include "qtweetusertimeline.h"
|
|
||||||
#include "qtweetdirectmessages.h"
|
|
||||||
#include "qtweetstatus.h"
|
|
||||||
#include "qtweetdmstatus.h"
|
|
||||||
#include "qtweetuser.h"
|
|
||||||
|
|
||||||
MainWindow::MainWindow(QWidget *parent) :
|
|
||||||
QMainWindow(parent),
|
|
||||||
ui(new Ui::MainWindow)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
|
|
||||||
m_sinceidHomeTimeline = 0;
|
|
||||||
m_sinceidMentions = 0;
|
|
||||||
m_sinceidUserTimeline = 0;
|
|
||||||
m_sinceidDirectMessages = 0;
|
|
||||||
|
|
||||||
m_oauthTwitter = new OAuthTwitter(this);
|
|
||||||
m_oauthTwitter->setNetworkAccessManager(new QNetworkAccessManager(this));
|
|
||||||
connect(m_oauthTwitter, SIGNAL(authorizeXAuthFinished()), this, SLOT(xauthFinished()));
|
|
||||||
connect(m_oauthTwitter, SIGNAL(authorizeXAuthError()), this, SLOT(xauthError()));
|
|
||||||
|
|
||||||
m_timer = new QTimer(this);
|
|
||||||
m_timer->setInterval(60000);
|
|
||||||
connect(m_timer, SIGNAL(timeout()), this, SLOT(timerTimeOut()));
|
|
||||||
|
|
||||||
connect(ui->authorizePushButton, SIGNAL(clicked()), this, SLOT(authorizeButtonClicked()));
|
|
||||||
}
|
|
||||||
|
|
||||||
MainWindow::~MainWindow()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::changeEvent(QEvent *e)
|
|
||||||
{
|
|
||||||
QMainWindow::changeEvent(e);
|
|
||||||
switch (e->type()) {
|
|
||||||
case QEvent::LanguageChange:
|
|
||||||
ui->retranslateUi(this);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::authorizeButtonClicked()
|
|
||||||
{
|
|
||||||
m_oauthTwitter->authorizeXAuth(ui->usernameLineEdit->text(), ui->passwordLineEdit->text());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::xauthFinished()
|
|
||||||
{
|
|
||||||
ui->statusBar->showMessage("xauth succesfull");
|
|
||||||
m_timer->start();
|
|
||||||
timerTimeOut();
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::xauthError()
|
|
||||||
{
|
|
||||||
ui->statusBar->showMessage("xauth failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::timerTimeOut()
|
|
||||||
{
|
|
||||||
QTweetHomeTimeline *homeTimeline = new QTweetHomeTimeline(m_oauthTwitter, this);
|
|
||||||
homeTimeline->fetch(m_sinceidHomeTimeline);
|
|
||||||
connect(homeTimeline, SIGNAL(parsedStatuses(QList<QTweetStatus>)),
|
|
||||||
this, SLOT(homeTimelineStatuses(QList<QTweetStatus>)));
|
|
||||||
|
|
||||||
QTweetMentions *mentions = new QTweetMentions(m_oauthTwitter, this);
|
|
||||||
mentions->fetch(m_sinceidMentions);
|
|
||||||
connect(mentions, SIGNAL(parsedStatuses(QList<QTweetStatus>)),
|
|
||||||
this, SLOT(mentionsStatuses(QList<QTweetStatus>)));
|
|
||||||
|
|
||||||
QTweetUserTimeline *userTimeline = new QTweetUserTimeline(m_oauthTwitter, this);
|
|
||||||
userTimeline->fetch(0, QString(), m_sinceidUserTimeline);
|
|
||||||
connect(userTimeline, SIGNAL(parsedStatuses(QList<QTweetStatus>)),
|
|
||||||
this, SLOT(userTimelineStatuses(QList<QTweetStatus>)));
|
|
||||||
|
|
||||||
QTweetDirectMessages *dmTimeline = new QTweetDirectMessages(m_oauthTwitter, this);
|
|
||||||
dmTimeline->fetch(m_sinceidDirectMessages);
|
|
||||||
connect(dmTimeline, SIGNAL(parsedDirectMessages(QList<QTweetDMStatus>)),
|
|
||||||
this, SLOT(directMessages(QList<QTweetDMStatus>)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::homeTimelineStatuses(const QList<QTweetStatus> &statuses)
|
|
||||||
{
|
|
||||||
QTweetHomeTimeline *homeTimeline = qobject_cast<QTweetHomeTimeline*>(sender());
|
|
||||||
|
|
||||||
if (homeTimeline) {
|
|
||||||
if (statuses.count()) {
|
|
||||||
//order is messed up, but this is just example
|
|
||||||
foreach (const QTweetStatus& status, statuses) {
|
|
||||||
ui->homeTimelineTextEdit->append("id: " + QString::number(status.id()));
|
|
||||||
ui->homeTimelineTextEdit->append("text: " + status.text());
|
|
||||||
ui->homeTimelineTextEdit->append("created: " + status.createdAt().toString());
|
|
||||||
|
|
||||||
QTweetUser userinfo = status.user();
|
|
||||||
|
|
||||||
ui->homeTimelineTextEdit->append("screen name: " + userinfo.screenName());
|
|
||||||
ui->homeTimelineTextEdit->append("user id: " + QString::number(userinfo.id()));
|
|
||||||
|
|
||||||
//is it retweet?
|
|
||||||
QTweetStatus rtStatus = status.retweetedStatus();
|
|
||||||
|
|
||||||
if (rtStatus.id()) {
|
|
||||||
ui->homeTimelineTextEdit->append("retweet text: " + rtStatus.text());
|
|
||||||
}
|
|
||||||
|
|
||||||
ui->homeTimelineTextEdit->append("----------------------------------------");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
m_sinceidHomeTimeline = statuses.at(0).id();
|
|
||||||
}
|
|
||||||
|
|
||||||
homeTimeline->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::mentionsStatuses(const QList<QTweetStatus> &statuses)
|
|
||||||
{
|
|
||||||
QTweetMentions *mentions = qobject_cast<QTweetMentions*>(sender());
|
|
||||||
|
|
||||||
if (mentions) {
|
|
||||||
if (statuses.count()) {
|
|
||||||
foreach (const QTweetStatus& status, statuses) {
|
|
||||||
ui->mentionsTextEdit->append("id: " + QString::number(status.id()));
|
|
||||||
ui->mentionsTextEdit->append("text: " + status.text());
|
|
||||||
ui->mentionsTextEdit->append("created: " + status.createdAt().toString());
|
|
||||||
|
|
||||||
QTweetUser userinfo = status.user();
|
|
||||||
|
|
||||||
ui->mentionsTextEdit->append("screen name: " + userinfo.screenName());
|
|
||||||
ui->mentionsTextEdit->append("user id: " + QString::number(userinfo.id()));
|
|
||||||
|
|
||||||
ui->mentionsTextEdit->append("----------------------------------------");
|
|
||||||
}
|
|
||||||
|
|
||||||
m_sinceidMentions = statuses.at(0).id();
|
|
||||||
}
|
|
||||||
mentions->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::userTimelineStatuses(const QList<QTweetStatus> &statuses)
|
|
||||||
{
|
|
||||||
QTweetUserTimeline *userTimeline = qobject_cast<QTweetUserTimeline*>(sender());
|
|
||||||
|
|
||||||
if (userTimeline) {
|
|
||||||
if (statuses.count()) {
|
|
||||||
//order is messed up, but this is just example
|
|
||||||
foreach (const QTweetStatus& status, statuses) {
|
|
||||||
ui->userTimelineTextEdit->append("id: " + QString::number(status.id()));
|
|
||||||
ui->userTimelineTextEdit->append("text: " + status.text());
|
|
||||||
ui->userTimelineTextEdit->append("created: " + status.createdAt().toString());
|
|
||||||
|
|
||||||
QTweetUser userinfo = status.user();
|
|
||||||
|
|
||||||
ui->userTimelineTextEdit->append("screen name: " + userinfo.screenName());
|
|
||||||
ui->userTimelineTextEdit->append("user id: " + QString::number(userinfo.id()));
|
|
||||||
|
|
||||||
ui->userTimelineTextEdit->append("----------------------------------------");
|
|
||||||
}
|
|
||||||
|
|
||||||
m_sinceidUserTimeline = statuses.at(0).id();
|
|
||||||
}
|
|
||||||
|
|
||||||
userTimeline->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::directMessages(const QList<QTweetDMStatus> &directMessages)
|
|
||||||
{
|
|
||||||
QTweetDirectMessages *dmTimeline = qobject_cast<QTweetDirectMessages*>(sender());
|
|
||||||
|
|
||||||
if (dmTimeline) {
|
|
||||||
if (directMessages.count()) {
|
|
||||||
foreach (const QTweetDMStatus& message, directMessages) {
|
|
||||||
ui->directMessagesTextEdit->append("id: " + QString::number(message.id()));
|
|
||||||
ui->directMessagesTextEdit->append("text: " + message.text());
|
|
||||||
ui->directMessagesTextEdit->append("created: " + message.createdAt().toString());
|
|
||||||
ui->directMessagesTextEdit->append("sender: " + message.senderScreenName());
|
|
||||||
ui->directMessagesTextEdit->append("sender id: " + QString::number(message.senderId()));
|
|
||||||
|
|
||||||
ui->directMessagesTextEdit->append("----------------------------------------");
|
|
||||||
}
|
|
||||||
|
|
||||||
m_sinceidDirectMessages = directMessages.at(0).id();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dmTimeline->deleteLater();
|
|
||||||
}
|
|
@@ -1,67 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef MAINWINDOW_H
|
|
||||||
#define MAINWINDOW_H
|
|
||||||
|
|
||||||
#include <QMainWindow>
|
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class MainWindow;
|
|
||||||
}
|
|
||||||
|
|
||||||
class OAuthTwitter;
|
|
||||||
class QTimer;
|
|
||||||
class QTweetStatus;
|
|
||||||
class QTweetDMStatus;
|
|
||||||
|
|
||||||
class MainWindow : public QMainWindow
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit MainWindow(QWidget *parent = 0);
|
|
||||||
~MainWindow();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void changeEvent(QEvent *e);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void authorizeButtonClicked();
|
|
||||||
void xauthFinished();
|
|
||||||
void xauthError();
|
|
||||||
void timerTimeOut();
|
|
||||||
void homeTimelineStatuses(const QList<QTweetStatus>& statuses);
|
|
||||||
void mentionsStatuses(const QList<QTweetStatus>& statuses);
|
|
||||||
void userTimelineStatuses(const QList<QTweetStatus>& statuses);
|
|
||||||
void directMessages(const QList<QTweetDMStatus>& directMessages);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::MainWindow *ui;
|
|
||||||
OAuthTwitter *m_oauthTwitter;
|
|
||||||
QTimer *m_timer;
|
|
||||||
qint64 m_sinceidHomeTimeline;
|
|
||||||
qint64 m_sinceidMentions;
|
|
||||||
qint64 m_sinceidUserTimeline;
|
|
||||||
qint64 m_sinceidDirectMessages;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
|
@@ -1,156 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>MainWindow</class>
|
|
||||||
<widget class="QMainWindow" name="MainWindow">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>627</width>
|
|
||||||
<height>600</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>MainWindow</string>
|
|
||||||
</property>
|
|
||||||
<widget class="QWidget" name="centralwidget">
|
|
||||||
<layout class="QGridLayout" name="gridLayout_6">
|
|
||||||
<item row="0" column="0" colspan="2">
|
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
|
||||||
<property name="currentIndex">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<widget class="QWidget" name="tab">
|
|
||||||
<attribute name="title">
|
|
||||||
<string> Home timeline</string>
|
|
||||||
</attribute>
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QTextEdit" name="homeTimelineTextEdit">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QWidget" name="tab_2">
|
|
||||||
<attribute name="title">
|
|
||||||
<string>Mentions timeline</string>
|
|
||||||
</attribute>
|
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QTextEdit" name="mentionsTextEdit">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QWidget" name="tab_3">
|
|
||||||
<attribute name="title">
|
|
||||||
<string>User timeline</string>
|
|
||||||
</attribute>
|
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QTextEdit" name="userTimelineTextEdit">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QWidget" name="tab_4">
|
|
||||||
<attribute name="title">
|
|
||||||
<string>Direct Messages</string>
|
|
||||||
</attribute>
|
|
||||||
<layout class="QGridLayout" name="gridLayout_4">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QTextEdit" name="directMessagesTextEdit">
|
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<layout class="QGridLayout" name="gridLayout_5">
|
|
||||||
<item row="0" column="0" colspan="2">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Username:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="usernameLineEdit"/>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" colspan="2">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Password:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLineEdit" name="passwordLineEdit">
|
|
||||||
<property name="echoMode">
|
|
||||||
<enum>QLineEdit::Password</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QPushButton" name="authorizePushButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Authorize</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<spacer name="horizontalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>40</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<spacer name="horizontalSpacer_2">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>368</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QStatusBar" name="statusBar"/>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
@@ -1,16 +0,0 @@
|
|||||||
QT += core gui network
|
|
||||||
|
|
||||||
TARGET = timelines
|
|
||||||
TEMPLATE = app
|
|
||||||
win32:LIBS += ../../lib/QTweetLib.lib
|
|
||||||
INCLUDEPATH += ../../src
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
mainwindow.cpp \
|
|
||||||
main.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
mainwindow.h
|
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
mainwindow.ui
|
|
@@ -1,32 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtGui/QApplication>
|
|
||||||
#include "userstream.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
UserStream w;
|
|
||||||
w.show();
|
|
||||||
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
||||||
|
|
@@ -1,110 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "userstream.h"
|
|
||||||
#include "ui_userstream.h"
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include <QTextStream>
|
|
||||||
#include <QFile>
|
|
||||||
#include "oauthtwitter.h"
|
|
||||||
#include "qtweetuserstream.h"
|
|
||||||
#include "qtweetstatus.h"
|
|
||||||
#include "qtweetuser.h"
|
|
||||||
|
|
||||||
UserStream::UserStream(QWidget *parent) :
|
|
||||||
QWidget(parent),
|
|
||||||
ui(new Ui::UserStream)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
|
|
||||||
m_oauthTwitter = new OAuthTwitter(new QNetworkAccessManager, this);
|
|
||||||
connect(m_oauthTwitter, SIGNAL(authorizeXAuthFinished()), SLOT(onAuthorizeFinished()));
|
|
||||||
connect(m_oauthTwitter, SIGNAL(authorizeXAuthError()), SLOT(onAuthorizeError()));
|
|
||||||
|
|
||||||
m_userStream = new QTweetUserStream(this);
|
|
||||||
m_userStream->setOAuthTwitter(m_oauthTwitter);
|
|
||||||
connect(m_userStream, SIGNAL(stream(QByteArray)), SLOT(stream(QByteArray)));
|
|
||||||
connect(m_userStream, SIGNAL(statusesStream(QTweetStatus)), SLOT(statusStream(QTweetStatus)));
|
|
||||||
|
|
||||||
connect(ui->connectButton, SIGNAL(clicked()), SLOT(onConnectButtonClicked()));
|
|
||||||
|
|
||||||
//for internal purposes
|
|
||||||
m_file.setFileName("logstream.txt");
|
|
||||||
m_file.open(QIODevice::WriteOnly | QIODevice::Text);
|
|
||||||
|
|
||||||
m_streamlogger.setDevice(&m_file);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
UserStream::~UserStream()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserStream::changeEvent(QEvent *e)
|
|
||||||
{
|
|
||||||
QWidget::changeEvent(e);
|
|
||||||
switch (e->type()) {
|
|
||||||
case QEvent::LanguageChange:
|
|
||||||
ui->retranslateUi(this);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserStream::onConnectButtonClicked()
|
|
||||||
{
|
|
||||||
m_oauthTwitter->authorizeXAuth(ui->usernameLineEdit->text(), ui->passwordLineEdit->text());
|
|
||||||
ui->infoTextBrowser->append("XAuth authorization started");
|
|
||||||
ui->connectButton->setEnabled(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserStream::onAuthorizeFinished()
|
|
||||||
{
|
|
||||||
ui->infoTextBrowser->append("XAuth authorization success.");
|
|
||||||
ui->infoTextBrowser->append("oauth token: " + m_oauthTwitter->oauthToken());
|
|
||||||
ui->infoTextBrowser->append("oauth token secret: " + m_oauthTwitter->oauthTokenSecret());
|
|
||||||
ui->infoTextBrowser->append("Starting user stream fetching");
|
|
||||||
|
|
||||||
m_userStream->startFetching();
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserStream::onAuthorizeError()
|
|
||||||
{
|
|
||||||
ui->infoTextBrowser->append("XAuth authorization error");
|
|
||||||
ui->connectButton->setEnabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserStream::stream(const QByteArray &stream)
|
|
||||||
{
|
|
||||||
//for internal purposes
|
|
||||||
m_streamlogger << stream << "\n";
|
|
||||||
m_streamlogger << "################################################################" << "\n";
|
|
||||||
m_streamlogger.flush();
|
|
||||||
}
|
|
||||||
|
|
||||||
void UserStream::statusStream(const QTweetStatus &tweet)
|
|
||||||
{
|
|
||||||
ui->infoTextBrowser->append("New tweet");
|
|
||||||
ui->infoTextBrowser->append("id: " + QString::number(tweet.id()));
|
|
||||||
ui->infoTextBrowser->append("text: " + tweet.text());
|
|
||||||
ui->infoTextBrowser->append("name: " + tweet.user().name());
|
|
||||||
}
|
|
@@ -1,62 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef USERSTREAM_H
|
|
||||||
#define USERSTREAM_H
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
#include <QTextStream>
|
|
||||||
#include <QFile>
|
|
||||||
|
|
||||||
namespace Ui {
|
|
||||||
class UserStream;
|
|
||||||
}
|
|
||||||
|
|
||||||
class OAuthTwitter;
|
|
||||||
class QTweetUserStream;
|
|
||||||
class QTweetStatus;
|
|
||||||
|
|
||||||
class UserStream : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
explicit UserStream(QWidget *parent = 0);
|
|
||||||
~UserStream();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void changeEvent(QEvent *e);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void onConnectButtonClicked();
|
|
||||||
void onAuthorizeFinished();
|
|
||||||
void onAuthorizeError();
|
|
||||||
void stream(const QByteArray& stream);
|
|
||||||
void statusStream(const QTweetStatus& tweet);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::UserStream *ui;
|
|
||||||
OAuthTwitter *m_oauthTwitter;
|
|
||||||
QTweetUserStream *m_userStream;
|
|
||||||
QTextStream m_streamlogger;
|
|
||||||
QFile m_file;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // USERSTREAM_H
|
|
@@ -1,17 +0,0 @@
|
|||||||
QT += core gui network
|
|
||||||
|
|
||||||
TARGET = userstream
|
|
||||||
TEMPLATE = app
|
|
||||||
win32:LIBS += ../../lib/QTweetLib.lib
|
|
||||||
INCLUDEPATH += ../../src
|
|
||||||
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
main.cpp \
|
|
||||||
userstream.cpp
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
userstream.h
|
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
userstream.ui
|
|
@@ -1,63 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>UserStream</class>
|
|
||||||
<widget class="QWidget" name="UserStream">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>418</width>
|
|
||||||
<height>529</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Form</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QTextBrowser" name="infoTextBrowser"/>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
|
||||||
<item>
|
|
||||||
<layout class="QFormLayout" name="formLayout">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Username:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLineEdit" name="usernameLineEdit"/>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Password:</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QLineEdit" name="passwordLineEdit">
|
|
||||||
<property name="echoMode">
|
|
||||||
<enum>QLineEdit::Password</enum>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QPushButton" name="connectButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Connect</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
1116
thirdparty/qtweetlib/qtweetlib/qjson/json_parser.cc
vendored
1116
thirdparty/qtweetlib/qtweetlib/qjson/json_parser.cc
vendored
File diff suppressed because it is too large
Load Diff
325
thirdparty/qtweetlib/qtweetlib/qjson/json_parser.hh
vendored
325
thirdparty/qtweetlib/qtweetlib/qjson/json_parser.hh
vendored
@@ -1,325 +0,0 @@
|
|||||||
/* A Bison parser, made by GNU Bison 2.3. */
|
|
||||||
|
|
||||||
/* Skeleton interface for Bison LALR(1) parsers in C++
|
|
||||||
|
|
||||||
Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* As a special exception, you may create a larger work that contains
|
|
||||||
part or all of the Bison parser skeleton and distribute that work
|
|
||||||
under terms of your choice, so long as that work isn't itself a
|
|
||||||
parser generator using the skeleton or a modified version thereof
|
|
||||||
as a parser skeleton. Alternatively, if you modify or redistribute
|
|
||||||
the parser skeleton itself, you may (at your option) remove this
|
|
||||||
special exception, which will cause the skeleton and the resulting
|
|
||||||
Bison output files to be licensed under the GNU General Public
|
|
||||||
License without this special exception.
|
|
||||||
|
|
||||||
This special exception was added by the Free Software Foundation in
|
|
||||||
version 2.2 of Bison. */
|
|
||||||
|
|
||||||
/* C++ LALR(1) parser skeleton written by Akim Demaille. */
|
|
||||||
|
|
||||||
#ifndef PARSER_HEADER_H
|
|
||||||
# define PARSER_HEADER_H
|
|
||||||
|
|
||||||
#include <string>
|
|
||||||
#include <iostream>
|
|
||||||
#include "stack.hh"
|
|
||||||
|
|
||||||
namespace yy
|
|
||||||
{
|
|
||||||
class position;
|
|
||||||
class location;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* First part of user declarations. */
|
|
||||||
#line 25 "json_parser.yy"
|
|
||||||
|
|
||||||
#include "parser_p.h"
|
|
||||||
#include "json_scanner.h"
|
|
||||||
#include "qjson_debug.h"
|
|
||||||
|
|
||||||
#include <QtCore/QByteArray>
|
|
||||||
#include <QtCore/QMap>
|
|
||||||
#include <QtCore/QString>
|
|
||||||
#include <QtCore/QVariant>
|
|
||||||
|
|
||||||
#include <limits>
|
|
||||||
|
|
||||||
class JSonScanner;
|
|
||||||
|
|
||||||
namespace QJson {
|
|
||||||
class Parser;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define YYERROR_VERBOSE 1
|
|
||||||
|
|
||||||
|
|
||||||
/* Line 35 of lalr1.cc. */
|
|
||||||
#line 75 "json_parser.hh"
|
|
||||||
|
|
||||||
#include "location.hh"
|
|
||||||
|
|
||||||
/* Enabling traces. */
|
|
||||||
#ifndef YYDEBUG
|
|
||||||
# define YYDEBUG 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Enabling verbose error messages. */
|
|
||||||
#ifdef YYERROR_VERBOSE
|
|
||||||
# undef YYERROR_VERBOSE
|
|
||||||
# define YYERROR_VERBOSE 1
|
|
||||||
#else
|
|
||||||
# define YYERROR_VERBOSE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Enabling the token table. */
|
|
||||||
#ifndef YYTOKEN_TABLE
|
|
||||||
# define YYTOKEN_TABLE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
|
|
||||||
If N is 0, then set CURRENT to the empty location which ends
|
|
||||||
the previous symbol: RHS[0] (always defined). */
|
|
||||||
|
|
||||||
#ifndef YYLLOC_DEFAULT
|
|
||||||
# define YYLLOC_DEFAULT(Current, Rhs, N) \
|
|
||||||
do { \
|
|
||||||
if (N) \
|
|
||||||
{ \
|
|
||||||
(Current).begin = (Rhs)[1].begin; \
|
|
||||||
(Current).end = (Rhs)[N].end; \
|
|
||||||
} \
|
|
||||||
else \
|
|
||||||
{ \
|
|
||||||
(Current).begin = (Current).end = (Rhs)[0].end; \
|
|
||||||
} \
|
|
||||||
} while (false)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace yy
|
|
||||||
{
|
|
||||||
|
|
||||||
/// A Bison parser.
|
|
||||||
class json_parser
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
/// Symbol semantic values.
|
|
||||||
#ifndef YYSTYPE
|
|
||||||
typedef int semantic_type;
|
|
||||||
#else
|
|
||||||
typedef YYSTYPE semantic_type;
|
|
||||||
#endif
|
|
||||||
/// Symbol locations.
|
|
||||||
typedef location location_type;
|
|
||||||
/// Tokens.
|
|
||||||
struct token
|
|
||||||
{
|
|
||||||
/* Tokens. */
|
|
||||||
enum yytokentype {
|
|
||||||
END = 0,
|
|
||||||
CURLY_BRACKET_OPEN = 1,
|
|
||||||
CURLY_BRACKET_CLOSE = 2,
|
|
||||||
SQUARE_BRACKET_OPEN = 3,
|
|
||||||
SQUARE_BRACKET_CLOSE = 4,
|
|
||||||
COLON = 5,
|
|
||||||
COMMA = 6,
|
|
||||||
MINUS = 7,
|
|
||||||
DOT = 8,
|
|
||||||
DIGIT = 9,
|
|
||||||
E = 10,
|
|
||||||
TRUE_VAL = 11,
|
|
||||||
FALSE_VAL = 12,
|
|
||||||
NULL_VAL = 13,
|
|
||||||
QUOTMARKOPEN = 14,
|
|
||||||
QUOTMARKCLOSE = 15,
|
|
||||||
STRING = 16,
|
|
||||||
INFINITY_VAL = 17,
|
|
||||||
NAN_VAL = 18
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
/// Token type.
|
|
||||||
typedef token::yytokentype token_type;
|
|
||||||
|
|
||||||
/// Build a parser object.
|
|
||||||
json_parser (QJson::ParserPrivate* driver_yyarg);
|
|
||||||
virtual ~json_parser ();
|
|
||||||
|
|
||||||
/// Parse.
|
|
||||||
/// \returns 0 iff parsing succeeded.
|
|
||||||
virtual int parse ();
|
|
||||||
|
|
||||||
/// The current debugging stream.
|
|
||||||
std::ostream& debug_stream () const;
|
|
||||||
/// Set the current debugging stream.
|
|
||||||
void set_debug_stream (std::ostream &);
|
|
||||||
|
|
||||||
/// Type for debugging levels.
|
|
||||||
typedef int debug_level_type;
|
|
||||||
/// The current debugging level.
|
|
||||||
debug_level_type debug_level () const;
|
|
||||||
/// Set the current debugging level.
|
|
||||||
void set_debug_level (debug_level_type l);
|
|
||||||
|
|
||||||
private:
|
|
||||||
/// Report a syntax error.
|
|
||||||
/// \param loc where the syntax error is found.
|
|
||||||
/// \param msg a description of the syntax error.
|
|
||||||
virtual void error (const location_type& loc, const std::string& msg);
|
|
||||||
|
|
||||||
/// Generate an error message.
|
|
||||||
/// \param state the state where the error occurred.
|
|
||||||
/// \param tok the look-ahead token.
|
|
||||||
virtual std::string yysyntax_error_ (int yystate, int tok);
|
|
||||||
|
|
||||||
#if YYDEBUG
|
|
||||||
/// \brief Report a symbol value on the debug stream.
|
|
||||||
/// \param yytype The token type.
|
|
||||||
/// \param yyvaluep Its semantic value.
|
|
||||||
/// \param yylocationp Its location.
|
|
||||||
virtual void yy_symbol_value_print_ (int yytype,
|
|
||||||
const semantic_type* yyvaluep,
|
|
||||||
const location_type* yylocationp);
|
|
||||||
/// \brief Report a symbol on the debug stream.
|
|
||||||
/// \param yytype The token type.
|
|
||||||
/// \param yyvaluep Its semantic value.
|
|
||||||
/// \param yylocationp Its location.
|
|
||||||
virtual void yy_symbol_print_ (int yytype,
|
|
||||||
const semantic_type* yyvaluep,
|
|
||||||
const location_type* yylocationp);
|
|
||||||
#endif /* ! YYDEBUG */
|
|
||||||
|
|
||||||
|
|
||||||
/// State numbers.
|
|
||||||
typedef int state_type;
|
|
||||||
/// State stack type.
|
|
||||||
typedef stack<state_type> state_stack_type;
|
|
||||||
/// Semantic value stack type.
|
|
||||||
typedef stack<semantic_type> semantic_stack_type;
|
|
||||||
/// location stack type.
|
|
||||||
typedef stack<location_type> location_stack_type;
|
|
||||||
|
|
||||||
/// The state stack.
|
|
||||||
state_stack_type yystate_stack_;
|
|
||||||
/// The semantic value stack.
|
|
||||||
semantic_stack_type yysemantic_stack_;
|
|
||||||
/// The location stack.
|
|
||||||
location_stack_type yylocation_stack_;
|
|
||||||
|
|
||||||
/// Internal symbol numbers.
|
|
||||||
typedef unsigned char token_number_type;
|
|
||||||
/* Tables. */
|
|
||||||
/// For a state, the index in \a yytable_ of its portion.
|
|
||||||
static const signed char yypact_[];
|
|
||||||
static const signed char yypact_ninf_;
|
|
||||||
|
|
||||||
/// For a state, default rule to reduce.
|
|
||||||
/// Unless\a yytable_ specifies something else to do.
|
|
||||||
/// Zero means the default is an error.
|
|
||||||
static const unsigned char yydefact_[];
|
|
||||||
|
|
||||||
static const signed char yypgoto_[];
|
|
||||||
static const signed char yydefgoto_[];
|
|
||||||
|
|
||||||
/// What to do in a state.
|
|
||||||
/// \a yytable_[yypact_[s]]: what to do in state \a s.
|
|
||||||
/// - if positive, shift that token.
|
|
||||||
/// - if negative, reduce the rule which number is the opposite.
|
|
||||||
/// - if zero, do what YYDEFACT says.
|
|
||||||
static const unsigned char yytable_[];
|
|
||||||
static const signed char yytable_ninf_;
|
|
||||||
|
|
||||||
static const signed char yycheck_[];
|
|
||||||
|
|
||||||
/// For a state, its accessing symbol.
|
|
||||||
static const unsigned char yystos_[];
|
|
||||||
|
|
||||||
/// For a rule, its LHS.
|
|
||||||
static const unsigned char yyr1_[];
|
|
||||||
/// For a rule, its RHS length.
|
|
||||||
static const unsigned char yyr2_[];
|
|
||||||
|
|
||||||
#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
|
|
||||||
/// For a symbol, its name in clear.
|
|
||||||
static const char* const yytname_[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if YYERROR_VERBOSE
|
|
||||||
/// Convert the symbol name \a n to a form suitable for a diagnostic.
|
|
||||||
virtual std::string yytnamerr_ (const char *n);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if YYDEBUG
|
|
||||||
/// A type to store symbol numbers and -1.
|
|
||||||
typedef signed char rhs_number_type;
|
|
||||||
/// A `-1'-separated list of the rules' RHS.
|
|
||||||
static const rhs_number_type yyrhs_[];
|
|
||||||
/// For each rule, the index of the first RHS symbol in \a yyrhs_.
|
|
||||||
static const unsigned char yyprhs_[];
|
|
||||||
/// For each rule, its source line number.
|
|
||||||
static const unsigned char yyrline_[];
|
|
||||||
/// For each scanner token number, its symbol number.
|
|
||||||
static const unsigned short int yytoken_number_[];
|
|
||||||
/// Report on the debug stream that the rule \a r is going to be reduced.
|
|
||||||
virtual void yy_reduce_print_ (int r);
|
|
||||||
/// Print the state stack on the debug stream.
|
|
||||||
virtual void yystack_print_ ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// Convert a scanner token number \a t to a symbol number.
|
|
||||||
token_number_type yytranslate_ (int t);
|
|
||||||
|
|
||||||
/// \brief Reclaim the memory associated to a symbol.
|
|
||||||
/// \param yymsg Why this token is reclaimed.
|
|
||||||
/// \param yytype The symbol type.
|
|
||||||
/// \param yyvaluep Its semantic value.
|
|
||||||
/// \param yylocationp Its location.
|
|
||||||
inline void yydestruct_ (const char* yymsg,
|
|
||||||
int yytype,
|
|
||||||
semantic_type* yyvaluep,
|
|
||||||
location_type* yylocationp);
|
|
||||||
|
|
||||||
/// Pop \a n symbols the three stacks.
|
|
||||||
inline void yypop_ (unsigned int n = 1);
|
|
||||||
|
|
||||||
/* Constants. */
|
|
||||||
static const int yyeof_;
|
|
||||||
/* LAST_ -- Last index in TABLE_. */
|
|
||||||
static const int yylast_;
|
|
||||||
static const int yynnts_;
|
|
||||||
static const int yyempty_;
|
|
||||||
static const int yyfinal_;
|
|
||||||
static const int yyterror_;
|
|
||||||
static const int yyerrcode_;
|
|
||||||
static const int yyntokens_;
|
|
||||||
static const unsigned int yyuser_token_number_max_;
|
|
||||||
static const token_number_type yyundef_token_;
|
|
||||||
|
|
||||||
/* Debugging. */
|
|
||||||
int yydebug_;
|
|
||||||
std::ostream* yycdebug_;
|
|
||||||
|
|
||||||
|
|
||||||
/* User arguments. */
|
|
||||||
QJson::ParserPrivate* driver;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* ! defined PARSER_HEADER_H */
|
|
219
thirdparty/qtweetlib/qtweetlib/qjson/json_parser.yy
vendored
219
thirdparty/qtweetlib/qtweetlib/qjson/json_parser.yy
vendored
@@ -1,219 +0,0 @@
|
|||||||
/* This file is part of QJSon
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
%skeleton "lalr1.cc"
|
|
||||||
%defines
|
|
||||||
%define "parser_class_name" "json_parser"
|
|
||||||
|
|
||||||
%{
|
|
||||||
#include "parser_p.h"
|
|
||||||
#include "json_scanner.h"
|
|
||||||
#include "qjson_debug.h"
|
|
||||||
|
|
||||||
#include <QtCore/QByteArray>
|
|
||||||
#include <QtCore/QMap>
|
|
||||||
#include <QtCore/QString>
|
|
||||||
#include <QtCore/QVariant>
|
|
||||||
|
|
||||||
#include <limits>
|
|
||||||
|
|
||||||
class JSonScanner;
|
|
||||||
|
|
||||||
namespace QJson {
|
|
||||||
class Parser;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define YYERROR_VERBOSE 1
|
|
||||||
%}
|
|
||||||
|
|
||||||
%parse-param { QJson::ParserPrivate* driver }
|
|
||||||
%lex-param { QJson::ParserPrivate* driver }
|
|
||||||
|
|
||||||
%locations
|
|
||||||
|
|
||||||
%debug
|
|
||||||
%error-verbose
|
|
||||||
|
|
||||||
%token END 0 "end of file"
|
|
||||||
|
|
||||||
%token CURLY_BRACKET_OPEN 1 "{"
|
|
||||||
%token CURLY_BRACKET_CLOSE 2 "}"
|
|
||||||
%token SQUARE_BRACKET_OPEN 3 "["
|
|
||||||
%token SQUARE_BRACKET_CLOSE 4 "]"
|
|
||||||
|
|
||||||
%token COLON 5 ":"
|
|
||||||
%token COMMA 6 ","
|
|
||||||
%token MINUS 7 "-"
|
|
||||||
%token DOT 8 "."
|
|
||||||
%token DIGIT 9 "digit"
|
|
||||||
%token E 10 "exponential"
|
|
||||||
%token TRUE_VAL 11 "true"
|
|
||||||
%token FALSE_VAL 12 "false"
|
|
||||||
%token NULL_VAL 13 "null"
|
|
||||||
%token QUOTMARKOPEN 14 "open quotation mark"
|
|
||||||
%token QUOTMARKCLOSE 15 "close quotation mark"
|
|
||||||
|
|
||||||
%token STRING 16 "string"
|
|
||||||
%token INFINITY_VAL 17 "Infinity"
|
|
||||||
%token NAN_VAL 18 "NaN"
|
|
||||||
|
|
||||||
// define the initial token
|
|
||||||
%start start
|
|
||||||
|
|
||||||
%%
|
|
||||||
|
|
||||||
// grammar rules
|
|
||||||
|
|
||||||
start: data {
|
|
||||||
driver->m_result = $1;
|
|
||||||
qjsonDebug() << "json_parser - parsing finished";
|
|
||||||
};
|
|
||||||
|
|
||||||
data: value { $$ = $1; }
|
|
||||||
| error
|
|
||||||
{
|
|
||||||
qCritical()<< "json_parser - syntax error found, "
|
|
||||||
<< "forcing abort, Line" << @$.begin.line << "Column" << @$.begin.column;
|
|
||||||
YYABORT;
|
|
||||||
}
|
|
||||||
| END;
|
|
||||||
|
|
||||||
object: CURLY_BRACKET_OPEN members CURLY_BRACKET_CLOSE { $$ = $2; };
|
|
||||||
|
|
||||||
members: /* empty */ { $$ = QVariant (QVariantMap()); }
|
|
||||||
| pair r_members {
|
|
||||||
QVariantMap members = $2.toMap();
|
|
||||||
$2 = QVariant(); // Allow reuse of map
|
|
||||||
$$ = QVariant(members.unite ($1.toMap()));
|
|
||||||
};
|
|
||||||
|
|
||||||
r_members: /* empty */ { $$ = QVariant (QVariantMap()); }
|
|
||||||
| COMMA pair r_members {
|
|
||||||
QVariantMap members = $3.toMap();
|
|
||||||
$3 = QVariant(); // Allow reuse of map
|
|
||||||
$$ = QVariant(members.unite ($2.toMap()));
|
|
||||||
};
|
|
||||||
|
|
||||||
pair: string COLON value {
|
|
||||||
QVariantMap pair;
|
|
||||||
pair.insert ($1.toString(), QVariant($3));
|
|
||||||
$$ = QVariant (pair);
|
|
||||||
};
|
|
||||||
|
|
||||||
array: SQUARE_BRACKET_OPEN values SQUARE_BRACKET_CLOSE { $$ = $2; };
|
|
||||||
|
|
||||||
values: /* empty */ { $$ = QVariant (QVariantList()); }
|
|
||||||
| value r_values {
|
|
||||||
QVariantList members = $2.toList();
|
|
||||||
$2 = QVariant(); // Allow reuse of list
|
|
||||||
members.prepend ($1);
|
|
||||||
$$ = QVariant(members);
|
|
||||||
};
|
|
||||||
|
|
||||||
r_values: /* empty */ { $$ = QVariant (QVariantList()); }
|
|
||||||
| COMMA value r_values {
|
|
||||||
QVariantList members = $3.toList();
|
|
||||||
$3 = QVariant(); // Allow reuse of list
|
|
||||||
members.prepend ($2);
|
|
||||||
$$ = QVariant(members);
|
|
||||||
};
|
|
||||||
|
|
||||||
value: string { $$ = $1; }
|
|
||||||
| special_or_number { $$ = $1; }
|
|
||||||
| object { $$ = $1; }
|
|
||||||
| array { $$ = $1; }
|
|
||||||
| TRUE_VAL { $$ = QVariant (true); }
|
|
||||||
| FALSE_VAL { $$ = QVariant (false); }
|
|
||||||
| NULL_VAL {
|
|
||||||
QVariant null_variant;
|
|
||||||
$$ = null_variant;
|
|
||||||
};
|
|
||||||
|
|
||||||
special_or_number: MINUS INFINITY_VAL { $$ = QVariant(QVariant::Double); $$.setValue( -std::numeric_limits<double>::infinity() ); }
|
|
||||||
| INFINITY_VAL { $$ = QVariant(QVariant::Double); $$.setValue( std::numeric_limits<double>::infinity() ); }
|
|
||||||
| NAN_VAL { $$ = QVariant(QVariant::Double); $$.setValue( std::numeric_limits<double>::quiet_NaN() ); }
|
|
||||||
| number;
|
|
||||||
|
|
||||||
number: int {
|
|
||||||
if ($1.toByteArray().startsWith('-')) {
|
|
||||||
$$ = QVariant (QVariant::LongLong);
|
|
||||||
$$.setValue($1.toLongLong());
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$$ = QVariant (QVariant::ULongLong);
|
|
||||||
$$.setValue($1.toULongLong());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
| int fract {
|
|
||||||
const QByteArray value = $1.toByteArray() + $2.toByteArray();
|
|
||||||
$$ = QVariant(QVariant::Double);
|
|
||||||
$$.setValue(value.toDouble());
|
|
||||||
}
|
|
||||||
| int exp { $$ = QVariant ($1.toByteArray() + $2.toByteArray()); }
|
|
||||||
| int fract exp {
|
|
||||||
const QByteArray value = $1.toByteArray() + $2.toByteArray() + $3.toByteArray();
|
|
||||||
$$ = QVariant (value);
|
|
||||||
};
|
|
||||||
|
|
||||||
int: DIGIT digits { $$ = QVariant ($1.toByteArray() + $2.toByteArray()); }
|
|
||||||
| MINUS DIGIT digits { $$ = QVariant (QByteArray("-") + $2.toByteArray() + $3.toByteArray()); };
|
|
||||||
|
|
||||||
digits: /* empty */ { $$ = QVariant (QByteArray("")); }
|
|
||||||
| DIGIT digits {
|
|
||||||
$$ = QVariant($1.toByteArray() + $2.toByteArray());
|
|
||||||
};
|
|
||||||
|
|
||||||
fract: DOT digits {
|
|
||||||
$$ = QVariant(QByteArray(".") + $2.toByteArray());
|
|
||||||
};
|
|
||||||
|
|
||||||
exp: E digits { $$ = QVariant($1.toByteArray() + $2.toByteArray()); };
|
|
||||||
|
|
||||||
string: QUOTMARKOPEN string_arg QUOTMARKCLOSE { $$ = $2; };
|
|
||||||
|
|
||||||
string_arg: /*empty */ { $$ = QVariant (QString(QLatin1String(""))); }
|
|
||||||
| STRING {
|
|
||||||
$$ = $1;
|
|
||||||
};
|
|
||||||
|
|
||||||
%%
|
|
||||||
|
|
||||||
int yy::yylex(YYSTYPE *yylval, yy::location *yylloc, QJson::ParserPrivate* driver)
|
|
||||||
{
|
|
||||||
JSonScanner* scanner = driver->m_scanner;
|
|
||||||
yylval->clear();
|
|
||||||
int ret = scanner->yylex(yylval, yylloc);
|
|
||||||
|
|
||||||
qjsonDebug() << "json_parser::yylex - calling scanner yylval==|"
|
|
||||||
<< yylval->toByteArray() << "|, ret==|" << QString::number(ret) << "|";
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void yy::json_parser::error (const yy::location& yyloc,
|
|
||||||
const std::string& error)
|
|
||||||
{
|
|
||||||
/*qjsonDebug() << yyloc.begin.line;
|
|
||||||
qjsonDebug() << yyloc.begin.column;
|
|
||||||
qjsonDebug() << yyloc.end.line;
|
|
||||||
qjsonDebug() << yyloc.end.column;*/
|
|
||||||
qjsonDebug() << "json_parser::error [line" << yyloc.end.line << "] -" << error.c_str() ;
|
|
||||||
driver->setError(QString::fromLatin1(error.c_str()), yyloc.end.line);
|
|
||||||
}
|
|
@@ -1,377 +0,0 @@
|
|||||||
/* This file is part of QJson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "qjson_debug.h"
|
|
||||||
#include "json_scanner.h"
|
|
||||||
#include "json_parser.hh"
|
|
||||||
|
|
||||||
#include <ctype.h>
|
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
|
||||||
#include <QtCore/QRegExp>
|
|
||||||
|
|
||||||
#include <cassert>
|
|
||||||
|
|
||||||
bool ishexnstring(const QString& string) {
|
|
||||||
for (int i = 0; i < string.length(); i++) {
|
|
||||||
if (isxdigit(string[i] == 0))
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
JSonScanner::JSonScanner(QIODevice* io)
|
|
||||||
: m_allowSpecialNumbers(false),
|
|
||||||
m_io (io)
|
|
||||||
{
|
|
||||||
m_quotmarkClosed = true;
|
|
||||||
m_quotmarkCount = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void JSonScanner::allowSpecialNumbers(bool allow) {
|
|
||||||
m_allowSpecialNumbers = allow;
|
|
||||||
}
|
|
||||||
|
|
||||||
static QString unescape( const QByteArray& ba, bool* ok ) {
|
|
||||||
assert( ok );
|
|
||||||
*ok = false;
|
|
||||||
QString res;
|
|
||||||
QByteArray seg;
|
|
||||||
bool bs = false;
|
|
||||||
for ( int i = 0, size = ba.size(); i < size; ++i ) {
|
|
||||||
const char ch = ba[i];
|
|
||||||
if ( !bs ) {
|
|
||||||
if ( ch == '\\' )
|
|
||||||
bs = true;
|
|
||||||
else
|
|
||||||
seg += ch;
|
|
||||||
} else {
|
|
||||||
bs = false;
|
|
||||||
switch ( ch ) {
|
|
||||||
case 'b':
|
|
||||||
seg += '\b';
|
|
||||||
break;
|
|
||||||
case 'f':
|
|
||||||
seg += '\f';
|
|
||||||
break;
|
|
||||||
case 'n':
|
|
||||||
seg += '\n';
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
seg += '\r';
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
seg += '\t';
|
|
||||||
break;
|
|
||||||
case 'u':
|
|
||||||
{
|
|
||||||
res += QString::fromUtf8( seg );
|
|
||||||
seg.clear();
|
|
||||||
|
|
||||||
if ( i > size - 5 ) {
|
|
||||||
//error
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
||||||
const QString hex_digit1 = QString::fromUtf8( ba.mid( i + 1, 2 ) );
|
|
||||||
const QString hex_digit2 = QString::fromUtf8( ba.mid( i + 3, 2 ) );
|
|
||||||
i += 4;
|
|
||||||
|
|
||||||
if ( !ishexnstring( hex_digit1 ) || !ishexnstring( hex_digit2 ) ) {
|
|
||||||
qCritical() << "Not an hex string:" << hex_digit1 << hex_digit2;
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
bool hexOk;
|
|
||||||
const ushort hex_code1 = hex_digit1.toShort( &hexOk, 16 );
|
|
||||||
if (!hexOk) {
|
|
||||||
qCritical() << "error converting hex value to short:" << hex_digit1;
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
const ushort hex_code2 = hex_digit2.toShort( &hexOk, 16 );
|
|
||||||
if (!hexOk) {
|
|
||||||
qCritical() << "error converting hex value to short:" << hex_digit2;
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
||||||
res += QChar(hex_code2, hex_code1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case '\\':
|
|
||||||
seg += '\\';
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
seg += ch;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
res += QString::fromUtf8( seg );
|
|
||||||
*ok = true;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
int JSonScanner::yylex(YYSTYPE* yylval, yy::location *yylloc)
|
|
||||||
{
|
|
||||||
char ch;
|
|
||||||
|
|
||||||
if (!m_io->isOpen()) {
|
|
||||||
qCritical() << "JSonScanner::yylex - io device is not open";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
yylloc->step();
|
|
||||||
|
|
||||||
do {
|
|
||||||
bool ret;
|
|
||||||
if (m_io->atEnd()) {
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::END";
|
|
||||||
return yy::json_parser::token::END;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ret = m_io->getChar(&ch);
|
|
||||||
|
|
||||||
if (!ret) {
|
|
||||||
qCritical() << "JSonScanner::yylex - error reading from io device";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - got |" << ch << "|";
|
|
||||||
yylloc->columns();
|
|
||||||
|
|
||||||
if (ch == '\n' || ch == '\r')
|
|
||||||
yylloc->lines();
|
|
||||||
} while (m_quotmarkClosed && (isspace(ch) != 0));
|
|
||||||
|
|
||||||
if (m_quotmarkClosed && ((ch == 't') || (ch == 'T'))) {
|
|
||||||
const QByteArray buf = m_io->peek(3).toLower();
|
|
||||||
if (buf == "rue") {
|
|
||||||
m_io->read (3);
|
|
||||||
yylloc->columns(3);
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - TRUE_VAL";
|
|
||||||
return yy::json_parser::token::TRUE_VAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (m_quotmarkClosed && ((ch == 'n') || (ch == 'N'))) {
|
|
||||||
const QByteArray buf = m_io->peek(3).toLower();
|
|
||||||
if (buf == "ull") {
|
|
||||||
m_io->read (3);
|
|
||||||
yylloc->columns(3);
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - NULL_VAL";
|
|
||||||
return yy::json_parser::token::NULL_VAL;
|
|
||||||
} else if (buf.startsWith("an") && m_allowSpecialNumbers) {
|
|
||||||
m_io->read(2);
|
|
||||||
yylloc->columns(2);
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - NAN_VAL";
|
|
||||||
return yy::json_parser::token::NAN_VAL;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (m_quotmarkClosed && ((ch == 'f') || (ch == 'F'))) {
|
|
||||||
// check false value
|
|
||||||
const QByteArray buf = m_io->peek(4).toLower();
|
|
||||||
if (buf.length() == 4) {
|
|
||||||
if (buf == "alse") {
|
|
||||||
m_io->read (4);
|
|
||||||
yylloc->columns(4);
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - FALSE_VAL";
|
|
||||||
return yy::json_parser::token::FALSE_VAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (m_quotmarkClosed && ((ch == 'e') || (ch == 'E'))) {
|
|
||||||
QByteArray ret(1, ch);
|
|
||||||
const QByteArray buf = m_io->peek(1);
|
|
||||||
if (!buf.isEmpty()) {
|
|
||||||
if ((buf[0] == '+' ) || (buf[0] == '-' )) {
|
|
||||||
ret += m_io->read (1);
|
|
||||||
yylloc->columns();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*yylval = QVariant(QString::fromUtf8(ret));
|
|
||||||
return yy::json_parser::token::E;
|
|
||||||
}
|
|
||||||
else if (m_allowSpecialNumbers && m_quotmarkClosed && ((ch == 'I') || (ch == 'i'))) {
|
|
||||||
QByteArray ret(1, ch);
|
|
||||||
const QByteArray buf = m_io->peek(7);
|
|
||||||
if (buf == "nfinity") {
|
|
||||||
m_io->read(7);
|
|
||||||
yylloc->columns(7);
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - INFINITY_VAL";
|
|
||||||
return yy::json_parser::token::INFINITY_VAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ch != '"' && !m_quotmarkClosed) {
|
|
||||||
// we're inside a " " block
|
|
||||||
QByteArray raw;
|
|
||||||
raw += ch;
|
|
||||||
char prevCh = ch;
|
|
||||||
bool escape_on = (ch == '\\') ? true : false;
|
|
||||||
|
|
||||||
while ( true ) {
|
|
||||||
char nextCh;
|
|
||||||
qint64 ret = m_io->peek(&nextCh, 1);
|
|
||||||
if (ret != 1) {
|
|
||||||
if (m_io->atEnd())
|
|
||||||
return yy::json_parser::token::END;
|
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
} else if ( !escape_on && nextCh == '\"' ) {
|
|
||||||
bool ok;
|
|
||||||
const QString str = unescape( raw, &ok );
|
|
||||||
*yylval = ok ? str : QString();
|
|
||||||
return ok ? yy::json_parser::token::STRING : -1;
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
if ( prevCh == '\\' && nextCh != '"' && nextCh != '\\' && nextCh != '/' &&
|
|
||||||
nextCh != 'b' && nextCh != 'f' && nextCh != 'n' &&
|
|
||||||
nextCh != 'r' && nextCh != 't' && nextCh != 'u') {
|
|
||||||
qjsonDebug() << "Just read" << nextCh;
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - error decoding escaped sequence";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
m_io->read(1); // consume
|
|
||||||
raw += nextCh;
|
|
||||||
prevCh = nextCh;
|
|
||||||
if (escape_on)
|
|
||||||
escape_on = false;
|
|
||||||
else
|
|
||||||
escape_on = (prevCh == '\\') ? true : false;
|
|
||||||
#if 0
|
|
||||||
if (nextCh == '\\') {
|
|
||||||
char buf;
|
|
||||||
if (m_io->getChar (&buf)) {
|
|
||||||
yylloc->columns();
|
|
||||||
if (((buf != '"') && (buf != '\\') && (buf != '/') &&
|
|
||||||
(buf != 'b') && (buf != 'f') && (buf != 'n') &&
|
|
||||||
(buf != 'r') && (buf != 't') && (buf != 'u'))) {
|
|
||||||
qjsonDebug() << "Just read" << buf;
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - error decoding escaped sequence";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qCritical() << "JSonScanner::yylex - error decoding escaped sequence : io error";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (isdigit(ch) != 0 && m_quotmarkClosed) {
|
|
||||||
bool ok;
|
|
||||||
QByteArray numArray = QByteArray::fromRawData( &ch, 1 * sizeof(char) );
|
|
||||||
qulonglong number = numArray.toULongLong(&ok);
|
|
||||||
if (!ok) {
|
|
||||||
//This shouldn't happen
|
|
||||||
qCritical() << "JSonScanner::yylex - error while converting char to ulonglong, returning -1";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (number == 0) {
|
|
||||||
// we have to return immediately otherwise numbers like
|
|
||||||
// 2.04 will be converted to 2.4
|
|
||||||
*yylval = QVariant(number);
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::DIGIT";
|
|
||||||
return yy::json_parser::token::DIGIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
char nextCh;
|
|
||||||
qint64 ret = m_io->peek(&nextCh, 1);
|
|
||||||
while (ret == 1 && isdigit(nextCh)) {
|
|
||||||
m_io->read(1); //consume
|
|
||||||
yylloc->columns(1);
|
|
||||||
numArray = QByteArray::fromRawData( &nextCh, 1 * sizeof(char) );
|
|
||||||
number = number * 10 + numArray.toULongLong(&ok);
|
|
||||||
if (!ok) {
|
|
||||||
//This shouldn't happen
|
|
||||||
qCritical() << "JSonScanner::yylex - error while converting char to ulonglong, returning -1";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
ret = m_io->peek(&nextCh, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
*yylval = QVariant(number);
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::DIGIT";
|
|
||||||
return yy::json_parser::token::DIGIT;
|
|
||||||
}
|
|
||||||
else if (isalnum(ch) != 0) {
|
|
||||||
*yylval = QVariant(QString(QChar::fromLatin1(ch)));
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::WORD ("
|
|
||||||
<< ch << ")";
|
|
||||||
return yy::json_parser::token::STRING;
|
|
||||||
}
|
|
||||||
else if (ch == ':') {
|
|
||||||
// set yylval
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::COLON";
|
|
||||||
return yy::json_parser::token::COLON;
|
|
||||||
}
|
|
||||||
else if (ch == '"') {
|
|
||||||
// yy::json_parser::token::QUOTMARK (")
|
|
||||||
|
|
||||||
// set yylval
|
|
||||||
m_quotmarkCount++;
|
|
||||||
if (m_quotmarkCount %2 == 0) {
|
|
||||||
m_quotmarkClosed = true;
|
|
||||||
m_quotmarkCount = 0;
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::QUOTMARKCLOSE";
|
|
||||||
return yy::json_parser::token::QUOTMARKCLOSE;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
m_quotmarkClosed = false;
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::QUOTMARKOPEN";
|
|
||||||
return yy::json_parser::token::QUOTMARKOPEN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (ch == ',') {
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::COMMA";
|
|
||||||
return yy::json_parser::token::COMMA;
|
|
||||||
}
|
|
||||||
else if (ch == '.') {
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::DOT";
|
|
||||||
return yy::json_parser::token::DOT;
|
|
||||||
}
|
|
||||||
else if (ch == '-') {
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::MINUS";
|
|
||||||
return yy::json_parser::token::MINUS;
|
|
||||||
}
|
|
||||||
else if (ch == '[') {
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::SQUARE_BRACKET_OPEN";
|
|
||||||
return yy::json_parser::token::SQUARE_BRACKET_OPEN;
|
|
||||||
}
|
|
||||||
else if (ch == ']') {
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::SQUARE_BRACKET_CLOSE";
|
|
||||||
return yy::json_parser::token::SQUARE_BRACKET_CLOSE;
|
|
||||||
}
|
|
||||||
else if (ch == '{') {
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::CURLY_BRACKET_OPEN";
|
|
||||||
return yy::json_parser::token::CURLY_BRACKET_OPEN;
|
|
||||||
}
|
|
||||||
else if (ch == '}') {
|
|
||||||
qjsonDebug() << "JSonScanner::yylex - yy::json_parser::token::CURLY_BRACKET_CLOSE";
|
|
||||||
return yy::json_parser::token::CURLY_BRACKET_CLOSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
//unknown char!
|
|
||||||
//TODO yyerror?
|
|
||||||
qCritical() << "JSonScanner::yylex - unknown char, returning -1";
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@@ -1,54 +0,0 @@
|
|||||||
/* This file is part of QJson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _JSON_SCANNER
|
|
||||||
#define _JSON_SCANNER
|
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
#include <string>
|
|
||||||
|
|
||||||
#include <QtCore/QIODevice>
|
|
||||||
#include <QtCore/QVariant>
|
|
||||||
|
|
||||||
#define YYSTYPE QVariant
|
|
||||||
|
|
||||||
#include "parser_p.h"
|
|
||||||
|
|
||||||
namespace yy {
|
|
||||||
class location;
|
|
||||||
int yylex(YYSTYPE *yylval, yy::location *yylloc, QJson::ParserPrivate* driver);
|
|
||||||
}
|
|
||||||
|
|
||||||
class JSonScanner
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
explicit JSonScanner(QIODevice* io);
|
|
||||||
int yylex(YYSTYPE* yylval, yy::location *yylloc);
|
|
||||||
void allowSpecialNumbers(bool allow);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
bool m_quotmarkClosed;
|
|
||||||
bool m_allowSpecialNumbers;
|
|
||||||
unsigned int m_quotmarkCount;
|
|
||||||
QIODevice* m_io;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
145
thirdparty/qtweetlib/qtweetlib/qjson/location.hh
vendored
145
thirdparty/qtweetlib/qtweetlib/qjson/location.hh
vendored
@@ -1,145 +0,0 @@
|
|||||||
/* A Bison parser, made by GNU Bison 2.3. */
|
|
||||||
|
|
||||||
/* Locations for Bison parsers in C++
|
|
||||||
|
|
||||||
Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* As a special exception, you may create a larger work that contains
|
|
||||||
part or all of the Bison parser skeleton and distribute that work
|
|
||||||
under terms of your choice, so long as that work isn't itself a
|
|
||||||
parser generator using the skeleton or a modified version thereof
|
|
||||||
as a parser skeleton. Alternatively, if you modify or redistribute
|
|
||||||
the parser skeleton itself, you may (at your option) remove this
|
|
||||||
special exception, which will cause the skeleton and the resulting
|
|
||||||
Bison output files to be licensed under the GNU General Public
|
|
||||||
License without this special exception.
|
|
||||||
|
|
||||||
This special exception was added by the Free Software Foundation in
|
|
||||||
version 2.2 of Bison. */
|
|
||||||
|
|
||||||
/**
|
|
||||||
** \file location.hh
|
|
||||||
** Define the yy::location class.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef BISON_LOCATION_HH
|
|
||||||
# define BISON_LOCATION_HH
|
|
||||||
|
|
||||||
# include <iostream>
|
|
||||||
# include <string>
|
|
||||||
# include "position.hh"
|
|
||||||
|
|
||||||
namespace yy
|
|
||||||
{
|
|
||||||
|
|
||||||
/// Abstract a location.
|
|
||||||
class location
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
/// Construct a location.
|
|
||||||
location ()
|
|
||||||
: begin (), end ()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Initialization.
|
|
||||||
inline void initialize (std::string* fn)
|
|
||||||
{
|
|
||||||
begin.initialize (fn);
|
|
||||||
end = begin;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \name Line and Column related manipulators
|
|
||||||
** \{ */
|
|
||||||
public:
|
|
||||||
/// Reset initial location to final location.
|
|
||||||
inline void step ()
|
|
||||||
{
|
|
||||||
begin = end;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Extend the current location to the COUNT next columns.
|
|
||||||
inline void columns (unsigned int count = 1)
|
|
||||||
{
|
|
||||||
end += count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Extend the current location to the COUNT next lines.
|
|
||||||
inline void lines (unsigned int count = 1)
|
|
||||||
{
|
|
||||||
end.lines (count);
|
|
||||||
}
|
|
||||||
/** \} */
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
/// Beginning of the located region.
|
|
||||||
position begin;
|
|
||||||
/// End of the located region.
|
|
||||||
position end;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Join two location objects to create a location.
|
|
||||||
inline const location operator+ (const location& begin, const location& end)
|
|
||||||
{
|
|
||||||
location res = begin;
|
|
||||||
res.end = end.end;
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Add two location objects.
|
|
||||||
inline const location operator+ (const location& begin, unsigned int width)
|
|
||||||
{
|
|
||||||
location res = begin;
|
|
||||||
res.columns (width);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Add and assign a location.
|
|
||||||
inline location& operator+= (location& res, unsigned int width)
|
|
||||||
{
|
|
||||||
res.columns (width);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \brief Intercept output stream redirection.
|
|
||||||
** \param ostr the destination output stream
|
|
||||||
** \param loc a reference to the location to redirect
|
|
||||||
**
|
|
||||||
** Avoid duplicate information.
|
|
||||||
*/
|
|
||||||
inline std::ostream& operator<< (std::ostream& ostr, const location& loc)
|
|
||||||
{
|
|
||||||
position last = loc.end - 1;
|
|
||||||
ostr << loc.begin;
|
|
||||||
if (last.filename
|
|
||||||
&& (!loc.begin.filename
|
|
||||||
|| *loc.begin.filename != *last.filename))
|
|
||||||
ostr << '-' << last;
|
|
||||||
else if (loc.begin.line != last.line)
|
|
||||||
ostr << '-' << last.line << '.' << last.column;
|
|
||||||
else if (loc.begin.column != last.column)
|
|
||||||
ostr << '-' << last.column;
|
|
||||||
return ostr;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // not BISON_LOCATION_HH
|
|
124
thirdparty/qtweetlib/qtweetlib/qjson/parser.cpp
vendored
124
thirdparty/qtweetlib/qtweetlib/qjson/parser.cpp
vendored
@@ -1,124 +0,0 @@
|
|||||||
/* This file is part of QJson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "parser.h"
|
|
||||||
#include "parser_p.h"
|
|
||||||
#include "json_parser.hh"
|
|
||||||
#include "json_scanner.h"
|
|
||||||
|
|
||||||
#include <QtCore/QBuffer>
|
|
||||||
#include <QtCore/QStringList>
|
|
||||||
#include <QtCore/QTextStream>
|
|
||||||
#include <QtCore/QDebug>
|
|
||||||
|
|
||||||
using namespace QJson;
|
|
||||||
|
|
||||||
ParserPrivate::ParserPrivate() :
|
|
||||||
m_scanner(0)
|
|
||||||
, m_negate(false)
|
|
||||||
, m_error(false)
|
|
||||||
, m_specialNumbersAllowed(false)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
ParserPrivate::~ParserPrivate()
|
|
||||||
{
|
|
||||||
delete m_scanner;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ParserPrivate::setError(QString errorMsg, int errorLine) {
|
|
||||||
m_error = true;
|
|
||||||
m_errorMsg = errorMsg;
|
|
||||||
m_errorLine = errorLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
Parser::Parser() :
|
|
||||||
d(new ParserPrivate)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Parser::~Parser()
|
|
||||||
{
|
|
||||||
delete d;
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant Parser::parse (QIODevice* io, bool* ok)
|
|
||||||
{
|
|
||||||
d->m_errorMsg.clear();
|
|
||||||
delete d->m_scanner;
|
|
||||||
d->m_scanner = 0;
|
|
||||||
|
|
||||||
if (!io->isOpen()) {
|
|
||||||
if (!io->open(QIODevice::ReadOnly)) {
|
|
||||||
if (ok != 0)
|
|
||||||
*ok = false;
|
|
||||||
qCritical ("Error opening device");
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!io->isReadable()) {
|
|
||||||
if (ok != 0)
|
|
||||||
*ok = false;
|
|
||||||
qCritical ("Device is not readable");
|
|
||||||
io->close();
|
|
||||||
return QVariant();
|
|
||||||
}
|
|
||||||
|
|
||||||
d->m_scanner = new JSonScanner (io);
|
|
||||||
d->m_scanner->allowSpecialNumbers(d->m_specialNumbersAllowed);
|
|
||||||
yy::json_parser parser(d);
|
|
||||||
parser.parse();
|
|
||||||
|
|
||||||
delete d->m_scanner;
|
|
||||||
d->m_scanner = 0;
|
|
||||||
|
|
||||||
if (ok != 0)
|
|
||||||
*ok = !d->m_error;
|
|
||||||
|
|
||||||
io->close();
|
|
||||||
return d->m_result;
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariant Parser::parse(const QByteArray& jsonString, bool* ok) {
|
|
||||||
QBuffer buffer;
|
|
||||||
buffer.open(QBuffer::ReadWrite);
|
|
||||||
buffer.write(jsonString);
|
|
||||||
buffer.seek(0);
|
|
||||||
return parse (&buffer, ok);
|
|
||||||
}
|
|
||||||
|
|
||||||
QString Parser::errorString() const
|
|
||||||
{
|
|
||||||
return d->m_errorMsg;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Parser::errorLine() const
|
|
||||||
{
|
|
||||||
return d->m_errorLine;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QJson::Parser::allowSpecialNumbers(bool allowSpecialNumbers) {
|
|
||||||
d->m_specialNumbersAllowed = allowSpecialNumbers;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Parser::specialNumbersAllowed() const {
|
|
||||||
return d->m_specialNumbersAllowed;
|
|
||||||
}
|
|
94
thirdparty/qtweetlib/qtweetlib/qjson/parser.h
vendored
94
thirdparty/qtweetlib/qtweetlib/qjson/parser.h
vendored
@@ -1,94 +0,0 @@
|
|||||||
/* This file is part of QJson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QJSON_PARSER_H
|
|
||||||
#define QJSON_PARSER_H
|
|
||||||
|
|
||||||
#include "qjson_export.h"
|
|
||||||
|
|
||||||
class QIODevice;
|
|
||||||
class QVariant;
|
|
||||||
|
|
||||||
namespace QJson {
|
|
||||||
|
|
||||||
class ParserPrivate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Main class used to convert JSON data to QVariant objects
|
|
||||||
*/
|
|
||||||
class QJSON_EXPORT Parser
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Parser();
|
|
||||||
~Parser();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read JSON string from the I/O Device and converts it to a QVariant object
|
|
||||||
* @param io Input output device
|
|
||||||
* @param ok if a conversion error occurs, *ok is set to false; otherwise *ok is set to true.
|
|
||||||
* @returns a QVariant object generated from the JSON string
|
|
||||||
*/
|
|
||||||
QVariant parse(QIODevice* io, bool* ok = 0);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a method provided for convenience.
|
|
||||||
* @param jsonData data containing the JSON object representation
|
|
||||||
* @param ok if a conversion error occurs, *ok is set to false; otherwise *ok is set to true.
|
|
||||||
* @returns a QVariant object generated from the JSON string
|
|
||||||
* @sa errorString
|
|
||||||
* @sa errorLine
|
|
||||||
*/
|
|
||||||
QVariant parse(const QByteArray& jsonData, bool* ok = 0);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method returns the error message
|
|
||||||
* @returns a QString object containing the error message of the last parse operation
|
|
||||||
* @sa errorLine
|
|
||||||
*/
|
|
||||||
QString errorString() const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method returns line number where the error occurred
|
|
||||||
* @returns the line number where the error occurred
|
|
||||||
* @sa errorString
|
|
||||||
*/
|
|
||||||
int errorLine() const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether special numbers (Infinity, -Infinity, NaN) are allowed as an extension to
|
|
||||||
* the standard
|
|
||||||
* @param allowSpecialNumbers new value of whether special numbers are allowed
|
|
||||||
* @sa specialNumbersAllowed
|
|
||||||
*/
|
|
||||||
void allowSpecialNumbers(bool allowSpecialNumbers);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns whether special numbers (Infinity, -Infinity, NaN) are allowed
|
|
||||||
* @sa allowSpecialNumbers
|
|
||||||
*/
|
|
||||||
bool specialNumbersAllowed() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
Q_DISABLE_COPY(Parser)
|
|
||||||
ParserPrivate* const d;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // QJSON_PARSER_H
|
|
56
thirdparty/qtweetlib/qtweetlib/qjson/parser_p.h
vendored
56
thirdparty/qtweetlib/qtweetlib/qjson/parser_p.h
vendored
@@ -1,56 +0,0 @@
|
|||||||
/* This file is part of QJson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2008 Flavio Castelli <flavio.castelli@gmail.com>
|
|
||||||
* Copyright (C) 2009 Michael Leupold <lemma@confuego.org>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QJSON_PARSER_P_H
|
|
||||||
#define QJSON_PARSER_P_H
|
|
||||||
|
|
||||||
#include "parser.h"
|
|
||||||
|
|
||||||
#include <QtCore/QString>
|
|
||||||
#include <QtCore/QVariant>
|
|
||||||
|
|
||||||
class JSonScanner;
|
|
||||||
|
|
||||||
namespace yy {
|
|
||||||
class json_parser;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace QJson {
|
|
||||||
|
|
||||||
class ParserPrivate
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ParserPrivate();
|
|
||||||
~ParserPrivate();
|
|
||||||
|
|
||||||
void setError(QString errorMsg, int line);
|
|
||||||
|
|
||||||
JSonScanner* m_scanner;
|
|
||||||
bool m_negate;
|
|
||||||
bool m_error;
|
|
||||||
int m_errorLine;
|
|
||||||
QString m_errorMsg;
|
|
||||||
QVariant m_result;
|
|
||||||
bool m_specialNumbersAllowed;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // QJSON_PARSER_H
|
|
@@ -1,68 +0,0 @@
|
|||||||
/* This file is part of qjson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "parserrunnable.h"
|
|
||||||
|
|
||||||
#include "parser.h"
|
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
|
||||||
#include <QtCore/QVariant>
|
|
||||||
|
|
||||||
using namespace QJson;
|
|
||||||
|
|
||||||
class QJson::ParserRunnable::Private
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
QByteArray m_data;
|
|
||||||
};
|
|
||||||
|
|
||||||
ParserRunnable::ParserRunnable(QObject* parent)
|
|
||||||
: QObject(parent),
|
|
||||||
QRunnable(),
|
|
||||||
d(new Private)
|
|
||||||
{
|
|
||||||
qRegisterMetaType<QVariant>("QVariant");
|
|
||||||
}
|
|
||||||
|
|
||||||
ParserRunnable::~ParserRunnable()
|
|
||||||
{
|
|
||||||
delete d;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ParserRunnable::setData( const QByteArray& data ) {
|
|
||||||
d->m_data = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ParserRunnable::run()
|
|
||||||
{
|
|
||||||
qDebug() << Q_FUNC_INFO;
|
|
||||||
|
|
||||||
bool ok;
|
|
||||||
Parser parser;
|
|
||||||
QVariant result = parser.parse (d->m_data, &ok);
|
|
||||||
if (ok) {
|
|
||||||
qDebug() << "successfully converted json item to QVariant object";
|
|
||||||
emit parsingFinished(result, true, QString());
|
|
||||||
} else {
|
|
||||||
const QString errorText = tr("An error occured while parsing json: %1").arg(parser.errorString());
|
|
||||||
qCritical() << errorText;
|
|
||||||
emit parsingFinished(QVariant(), false, errorText);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,67 +0,0 @@
|
|||||||
/* This file is part of qjson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PARSERRUNNABLE_H
|
|
||||||
#define PARSERRUNNABLE_H
|
|
||||||
|
|
||||||
#include "qjson_export.h"
|
|
||||||
|
|
||||||
#include <QtCore/QObject>
|
|
||||||
#include <QtCore/QRunnable>
|
|
||||||
|
|
||||||
class QVariant;
|
|
||||||
|
|
||||||
namespace QJson {
|
|
||||||
/**
|
|
||||||
* @brief Convenience class for converting JSON data to QVariant objects using a dedicated thread
|
|
||||||
*/
|
|
||||||
class QJSON_EXPORT ParserRunnable : public QObject, public QRunnable
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* This signal is emitted when the conversion process has been completed
|
|
||||||
* @param data contains the JSON data that has to be converted
|
|
||||||
* @param parent parent of the object
|
|
||||||
**/
|
|
||||||
explicit ParserRunnable(QObject* parent = 0);
|
|
||||||
~ParserRunnable();
|
|
||||||
|
|
||||||
void setData( const QByteArray& data );
|
|
||||||
|
|
||||||
void run();
|
|
||||||
|
|
||||||
Q_SIGNALS:
|
|
||||||
/**
|
|
||||||
* This signal is emitted when the parsing process has been completed
|
|
||||||
* @param json contains the result of the parsing
|
|
||||||
* @param ok if a parsing error occurs ok is set to false, otherwise it's set to true.
|
|
||||||
* @param error_msg contains a string explaining the failure reason
|
|
||||||
**/
|
|
||||||
void parsingFinished(const QVariant& json, bool ok, const QString& error_msg);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Q_DISABLE_COPY(ParserRunnable)
|
|
||||||
class Private;
|
|
||||||
Private* const d;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // PARSERRUNNABLE_H
|
|
142
thirdparty/qtweetlib/qtweetlib/qjson/position.hh
vendored
142
thirdparty/qtweetlib/qtweetlib/qjson/position.hh
vendored
@@ -1,142 +0,0 @@
|
|||||||
/* A Bison parser, made by GNU Bison 2.3. */
|
|
||||||
|
|
||||||
/* Positions for Bison parsers in C++
|
|
||||||
|
|
||||||
Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* As a special exception, you may create a larger work that contains
|
|
||||||
part or all of the Bison parser skeleton and distribute that work
|
|
||||||
under terms of your choice, so long as that work isn't itself a
|
|
||||||
parser generator using the skeleton or a modified version thereof
|
|
||||||
as a parser skeleton. Alternatively, if you modify or redistribute
|
|
||||||
the parser skeleton itself, you may (at your option) remove this
|
|
||||||
special exception, which will cause the skeleton and the resulting
|
|
||||||
Bison output files to be licensed under the GNU General Public
|
|
||||||
License without this special exception.
|
|
||||||
|
|
||||||
This special exception was added by the Free Software Foundation in
|
|
||||||
version 2.2 of Bison. */
|
|
||||||
|
|
||||||
/**
|
|
||||||
** \file position.hh
|
|
||||||
** Define the yy::position class.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef BISON_POSITION_HH
|
|
||||||
# define BISON_POSITION_HH
|
|
||||||
|
|
||||||
# include <iostream>
|
|
||||||
# include <string>
|
|
||||||
|
|
||||||
namespace yy
|
|
||||||
{
|
|
||||||
/// Abstract a position.
|
|
||||||
class position
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
/// Construct a position.
|
|
||||||
position ()
|
|
||||||
: filename (0), line (1), column (0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// Initialization.
|
|
||||||
inline void initialize (std::string* fn)
|
|
||||||
{
|
|
||||||
filename = fn;
|
|
||||||
line = 1;
|
|
||||||
column = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \name Line and Column related manipulators
|
|
||||||
** \{ */
|
|
||||||
public:
|
|
||||||
/// (line related) Advance to the COUNT next lines.
|
|
||||||
inline void lines (int count = 1)
|
|
||||||
{
|
|
||||||
column = 0;
|
|
||||||
line += count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// (column related) Advance to the COUNT next columns.
|
|
||||||
inline void columns (int count = 1)
|
|
||||||
{
|
|
||||||
int leftmost = 0;
|
|
||||||
int current = column;
|
|
||||||
if (leftmost <= current + count)
|
|
||||||
column += count;
|
|
||||||
else
|
|
||||||
column = 0;
|
|
||||||
}
|
|
||||||
/** \} */
|
|
||||||
|
|
||||||
public:
|
|
||||||
/// File name to which this position refers.
|
|
||||||
std::string* filename;
|
|
||||||
/// Current line number.
|
|
||||||
unsigned int line;
|
|
||||||
/// Current column number.
|
|
||||||
unsigned int column;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Add and assign a position.
|
|
||||||
inline const position&
|
|
||||||
operator+= (position& res, const int width)
|
|
||||||
{
|
|
||||||
res.columns (width);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Add two position objects.
|
|
||||||
inline const position
|
|
||||||
operator+ (const position& begin, const int width)
|
|
||||||
{
|
|
||||||
position res = begin;
|
|
||||||
return res += width;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Add and assign a position.
|
|
||||||
inline const position&
|
|
||||||
operator-= (position& res, const int width)
|
|
||||||
{
|
|
||||||
return res += -width;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Add two position objects.
|
|
||||||
inline const position
|
|
||||||
operator- (const position& begin, const int width)
|
|
||||||
{
|
|
||||||
return begin + -width;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \brief Intercept output stream redirection.
|
|
||||||
** \param ostr the destination output stream
|
|
||||||
** \param pos a reference to the position to redirect
|
|
||||||
*/
|
|
||||||
inline std::ostream&
|
|
||||||
operator<< (std::ostream& ostr, const position& pos)
|
|
||||||
{
|
|
||||||
if (pos.filename)
|
|
||||||
ostr << *pos.filename << ':';
|
|
||||||
return ostr << pos.line << '.' << pos.column;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif // not BISON_POSITION_HH
|
|
34
thirdparty/qtweetlib/qtweetlib/qjson/qjson.pro
vendored
34
thirdparty/qtweetlib/qtweetlib/qjson/qjson.pro
vendored
@@ -1,34 +0,0 @@
|
|||||||
TEMPLATE = lib
|
|
||||||
QT -= gui
|
|
||||||
TARGET = qjson
|
|
||||||
DESTDIR = ../lib
|
|
||||||
CONFIG += create_prl
|
|
||||||
|
|
||||||
windows: {
|
|
||||||
DEFINES += QJSON_MAKEDLL
|
|
||||||
}
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
stack.hh \
|
|
||||||
serializerrunnable.h \
|
|
||||||
serializer.h \
|
|
||||||
qobjecthelper.h \
|
|
||||||
qjson_export.h \
|
|
||||||
qjson_debug.h \
|
|
||||||
position.hh \
|
|
||||||
parserrunnable.h \
|
|
||||||
parser_p.h \
|
|
||||||
parser.h \
|
|
||||||
location.hh \
|
|
||||||
json_scanner.h \
|
|
||||||
json_parser.hh \
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
serializerrunnable.cpp \
|
|
||||||
serializer.cpp \
|
|
||||||
qobjecthelper.cpp \
|
|
||||||
parserrunnable.cpp \
|
|
||||||
parser.cpp \
|
|
||||||
json_scanner.cpp \
|
|
||||||
json_parser.cc \
|
|
||||||
|
|
@@ -1,33 +0,0 @@
|
|||||||
/* This file is part of qjson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2009 Michael Leupold <lemma@confuego.org>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QJSON_DEBUG_H
|
|
||||||
#define QJSON_DEBUG_H
|
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
|
||||||
|
|
||||||
// define qjsonDebug()
|
|
||||||
#ifdef QJSON_VERBOSE_DEBUG_OUTPUT
|
|
||||||
inline QDebug qjsonDebug() { return QDebug(QtDebugMsg); }
|
|
||||||
#else
|
|
||||||
inline QNoDebug qjsonDebug() { return QNoDebug(); }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,35 +0,0 @@
|
|||||||
/* This file is part of the KDE project
|
|
||||||
Copyright (C) 2009 Pino Toscano <pino@kde.org>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Library General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2 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
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public License
|
|
||||||
along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QJSON_EXPORT_H
|
|
||||||
#define QJSON_EXPORT_H
|
|
||||||
|
|
||||||
#include <QtCore/qglobal.h>
|
|
||||||
|
|
||||||
#ifndef QJSON_EXPORT
|
|
||||||
# if defined(QJSON_MAKEDLL)
|
|
||||||
/* We are building this library */
|
|
||||||
# define QJSON_EXPORT Q_DECL_EXPORT
|
|
||||||
# else
|
|
||||||
/* We are using this library */
|
|
||||||
# define QJSON_EXPORT Q_DECL_IMPORT
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,84 +0,0 @@
|
|||||||
/* This file is part of qjson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2009 Till Adam <adam@kde.org>
|
|
||||||
* Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "qobjecthelper.h"
|
|
||||||
|
|
||||||
#include <QtCore/QMetaObject>
|
|
||||||
#include <QtCore/QMetaProperty>
|
|
||||||
#include <QtCore/QObject>
|
|
||||||
|
|
||||||
using namespace QJson;
|
|
||||||
|
|
||||||
class QObjectHelper::QObjectHelperPrivate {
|
|
||||||
};
|
|
||||||
|
|
||||||
QObjectHelper::QObjectHelper()
|
|
||||||
: d (new QObjectHelperPrivate)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QObjectHelper::~QObjectHelper()
|
|
||||||
{
|
|
||||||
delete d;
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariantMap QObjectHelper::qobject2qvariant( const QObject* object,
|
|
||||||
const QStringList& ignoredProperties)
|
|
||||||
{
|
|
||||||
QVariantMap result;
|
|
||||||
const QMetaObject *metaobject = object->metaObject();
|
|
||||||
int count = metaobject->propertyCount();
|
|
||||||
for (int i=0; i<count; ++i) {
|
|
||||||
QMetaProperty metaproperty = metaobject->property(i);
|
|
||||||
const char *name = metaproperty.name();
|
|
||||||
|
|
||||||
if (ignoredProperties.contains(QLatin1String(name)) || (!metaproperty.isReadable()))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
QVariant value = object->property(name);
|
|
||||||
result[QLatin1String(name)] = value;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QObjectHelper::qvariant2qobject(const QVariantMap& variant, QObject* object)
|
|
||||||
{
|
|
||||||
const QMetaObject *metaobject = object->metaObject();
|
|
||||||
|
|
||||||
QVariantMap::const_iterator iter;
|
|
||||||
for (iter = variant.constBegin(); iter != variant.constEnd(); iter++) {
|
|
||||||
int pIdx = metaobject->indexOfProperty( iter.key().toAscii() );
|
|
||||||
|
|
||||||
if ( pIdx < 0 ) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
QMetaProperty metaproperty = metaobject->property( pIdx );
|
|
||||||
QVariant::Type type = metaproperty.type();
|
|
||||||
QVariant v( iter.value() );
|
|
||||||
|
|
||||||
if ( v.canConvert( type ) ) {
|
|
||||||
v.convert( type );
|
|
||||||
metaproperty.write( object, v );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
143
thirdparty/qtweetlib/qtweetlib/qjson/qobjecthelper.h
vendored
143
thirdparty/qtweetlib/qtweetlib/qjson/qobjecthelper.h
vendored
@@ -1,143 +0,0 @@
|
|||||||
/* This file is part of qjson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QOBJECTHELPER_H
|
|
||||||
#define QOBJECTHELPER_H
|
|
||||||
|
|
||||||
#include "qjson_export.h"
|
|
||||||
|
|
||||||
#include <QtCore/QLatin1String>
|
|
||||||
#include <QtCore/QStringList>
|
|
||||||
#include <QtCore/QVariantMap>
|
|
||||||
|
|
||||||
class QObject;
|
|
||||||
|
|
||||||
namespace QJson {
|
|
||||||
/**
|
|
||||||
* @brief Class used to convert QObject into QVariant and vivce-versa.
|
|
||||||
* During these operations only the class attributes defined as properties will
|
|
||||||
* be considered.
|
|
||||||
*
|
|
||||||
* Suppose the declaration of the Person class looks like this:
|
|
||||||
* \code
|
|
||||||
* class Person : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
Q_PROPERTY(QString name READ name WRITE setName)
|
|
||||||
Q_PROPERTY(int phoneNumber READ phoneNumber WRITE setPhoneNumber)
|
|
||||||
Q_PROPERTY(Gender gender READ gender WRITE setGender)
|
|
||||||
Q_PROPERTY(QDate dob READ dob WRITE setDob)
|
|
||||||
Q_ENUMS(Gender)
|
|
||||||
|
|
||||||
public:
|
|
||||||
Person(QObject* parent = 0);
|
|
||||||
~Person();
|
|
||||||
|
|
||||||
QString name() const;
|
|
||||||
void setName(const QString& name);
|
|
||||||
|
|
||||||
int phoneNumber() const;
|
|
||||||
void setPhoneNumber(const int phoneNumber);
|
|
||||||
|
|
||||||
enum Gender {Male, Female};
|
|
||||||
void setGender(Gender gender);
|
|
||||||
Gender gender() const;
|
|
||||||
|
|
||||||
QDate dob() const;
|
|
||||||
void setDob(const QDate& dob);
|
|
||||||
|
|
||||||
private:
|
|
||||||
QString m_name;
|
|
||||||
int m_phoneNumber;
|
|
||||||
Gender m_gender;
|
|
||||||
QDate m_dob;
|
|
||||||
};
|
|
||||||
\endcode
|
|
||||||
|
|
||||||
The following code will serialize an instance of Person to JSON :
|
|
||||||
|
|
||||||
\code
|
|
||||||
Person person;
|
|
||||||
person.setName("Flavio");
|
|
||||||
person.setPhoneNumber(123456);
|
|
||||||
person.setGender(Person::Male);
|
|
||||||
person.setDob(QDate(1982, 7, 12));
|
|
||||||
|
|
||||||
QVariantMap variant = QObjectHelper::qobject2qvariant(&person);
|
|
||||||
Serializer serializer;
|
|
||||||
qDebug() << serializer.serialize( variant);
|
|
||||||
\endcode
|
|
||||||
|
|
||||||
The generated output will be:
|
|
||||||
\code
|
|
||||||
{ "dob" : "1982-07-12", "gender" : 0, "name" : "Flavio", "phoneNumber" : 123456 }
|
|
||||||
\endcode
|
|
||||||
|
|
||||||
It's also possible to initialize a QObject using the values stored inside of
|
|
||||||
a QVariantMap.
|
|
||||||
|
|
||||||
Suppose you have the following JSON data stored into a QString:
|
|
||||||
\code
|
|
||||||
{ "dob" : "1982-07-12", "gender" : 0, "name" : "Flavio", "phoneNumber" : 123456 }
|
|
||||||
\endcode
|
|
||||||
|
|
||||||
The following code will initialize an already allocated instance of Person
|
|
||||||
using the JSON values:
|
|
||||||
\code
|
|
||||||
Parser parser;
|
|
||||||
QVariant variant = parser.parse(json);
|
|
||||||
|
|
||||||
Person person;
|
|
||||||
QObjectHelper::qvariant2qobject(variant.toMap(), &person);
|
|
||||||
\endcode
|
|
||||||
|
|
||||||
\sa Parser
|
|
||||||
\sa Serializer
|
|
||||||
*/
|
|
||||||
class QJSON_EXPORT QObjectHelper {
|
|
||||||
public:
|
|
||||||
QObjectHelper();
|
|
||||||
~QObjectHelper();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method converts a QObject instance into a QVariantMap.
|
|
||||||
*
|
|
||||||
* @param object The QObject instance to be converted.
|
|
||||||
* @param ignoredProperties Properties that won't be converted.
|
|
||||||
*/
|
|
||||||
static QVariantMap qobject2qvariant( const QObject* object,
|
|
||||||
const QStringList& ignoredProperties = QStringList(QString(QLatin1String("objectName"))));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method converts a QVariantMap instance into a QObject
|
|
||||||
*
|
|
||||||
* @param object The QObject instance to be converted.
|
|
||||||
*/
|
|
||||||
static void qvariant2qobject(const QVariantMap& variant, QObject* object);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Q_DISABLE_COPY(QObjectHelper)
|
|
||||||
class QObjectHelperPrivate;
|
|
||||||
QObjectHelperPrivate* const d;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // QOBJECTHELPER_H
|
|
220
thirdparty/qtweetlib/qtweetlib/qjson/serializer.cpp
vendored
220
thirdparty/qtweetlib/qtweetlib/qjson/serializer.cpp
vendored
@@ -1,220 +0,0 @@
|
|||||||
/* This file is part of qjson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2009 Till Adam <adam@kde.org>
|
|
||||||
* Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "serializer.h"
|
|
||||||
|
|
||||||
#include <QtCore/QDataStream>
|
|
||||||
#include <QtCore/QStringList>
|
|
||||||
#include <QtCore/QVariant>
|
|
||||||
|
|
||||||
#include <cmath>
|
|
||||||
#include <float.h>
|
|
||||||
|
|
||||||
using namespace QJson;
|
|
||||||
|
|
||||||
class Serializer::SerializerPrivate {
|
|
||||||
public:
|
|
||||||
SerializerPrivate() : specialNumbersAllowed(false) {}
|
|
||||||
bool specialNumbersAllowed;
|
|
||||||
QString sanitizeString( QString str );
|
|
||||||
};
|
|
||||||
|
|
||||||
QString Serializer::SerializerPrivate::sanitizeString( QString str )
|
|
||||||
{
|
|
||||||
str.replace( QLatin1String( "\\" ), QLatin1String( "\\\\" ) );
|
|
||||||
|
|
||||||
// escape unicode chars
|
|
||||||
QString result;
|
|
||||||
const ushort* unicode = str.utf16();
|
|
||||||
unsigned int i = 0;
|
|
||||||
|
|
||||||
while ( unicode[ i ] ) {
|
|
||||||
if ( unicode[ i ] < 128 ) {
|
|
||||||
result.append( QChar( unicode[ i ] ) );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
QString hexCode = QString::number( unicode[ i ], 16 ).rightJustified( 4,
|
|
||||||
QLatin1Char('0') );
|
|
||||||
|
|
||||||
result.append( QLatin1String ("\\u") ).append( hexCode );
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
str = result;
|
|
||||||
|
|
||||||
str.replace( QLatin1String( "\"" ), QLatin1String( "\\\"" ) );
|
|
||||||
str.replace( QLatin1String( "\b" ), QLatin1String( "\\b" ) );
|
|
||||||
str.replace( QLatin1String( "\f" ), QLatin1String( "\\f" ) );
|
|
||||||
str.replace( QLatin1String( "\n" ), QLatin1String( "\\n" ) );
|
|
||||||
str.replace( QLatin1String( "\r" ), QLatin1String( "\\r" ) );
|
|
||||||
str.replace( QLatin1String( "\t" ), QLatin1String( "\\t" ) );
|
|
||||||
|
|
||||||
return QString( QLatin1String( "\"%1\"" ) ).arg( str );
|
|
||||||
}
|
|
||||||
|
|
||||||
Serializer::Serializer()
|
|
||||||
: d( new SerializerPrivate )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Serializer::~Serializer() {
|
|
||||||
delete d;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Serializer::serialize( const QVariant& v, QIODevice* io, bool* ok )
|
|
||||||
{
|
|
||||||
Q_ASSERT( io );
|
|
||||||
if (!io->isOpen()) {
|
|
||||||
if (!io->open(QIODevice::WriteOnly)) {
|
|
||||||
if ( ok != 0 )
|
|
||||||
*ok = false;
|
|
||||||
qCritical ("Error opening device");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!io->isWritable()) {
|
|
||||||
if (ok != 0)
|
|
||||||
*ok = false;
|
|
||||||
qCritical ("Device is not readable");
|
|
||||||
io->close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const QByteArray str = serialize( v );
|
|
||||||
if ( !str.isNull() ) {
|
|
||||||
QDataStream stream( io );
|
|
||||||
stream << str;
|
|
||||||
} else {
|
|
||||||
if ( ok )
|
|
||||||
*ok = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static QByteArray join( const QList<QByteArray>& list, const QByteArray& sep ) {
|
|
||||||
QByteArray res;
|
|
||||||
Q_FOREACH( const QByteArray& i, list ) {
|
|
||||||
if ( !res.isEmpty() )
|
|
||||||
res += sep;
|
|
||||||
res += i;
|
|
||||||
}
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray Serializer::serialize( const QVariant &v )
|
|
||||||
{
|
|
||||||
QByteArray str;
|
|
||||||
bool error = false;
|
|
||||||
|
|
||||||
if ( ! v.isValid() ) { // invalid or null?
|
|
||||||
str = "null";
|
|
||||||
} else if (( v.type() == QVariant::List ) || ( v.type() == QVariant::StringList )){ // an array or a stringlist?
|
|
||||||
const QVariantList list = v.toList();
|
|
||||||
QList<QByteArray> values;
|
|
||||||
Q_FOREACH( const QVariant& v, list )
|
|
||||||
{
|
|
||||||
QByteArray serializedValue = serialize( v );
|
|
||||||
if ( serializedValue.isNull() ) {
|
|
||||||
error = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
values << serializedValue;
|
|
||||||
}
|
|
||||||
str = "[ " + join( values, ", " ) + " ]";
|
|
||||||
} else if ( v.type() == QVariant::Map ) { // variant is a map?
|
|
||||||
const QVariantMap vmap = v.toMap();
|
|
||||||
QMapIterator<QString, QVariant> it( vmap );
|
|
||||||
str = "{ ";
|
|
||||||
QList<QByteArray> pairs;
|
|
||||||
while ( it.hasNext() ) {
|
|
||||||
it.next();
|
|
||||||
QByteArray serializedValue = serialize( it.value() );
|
|
||||||
if ( serializedValue.isNull() ) {
|
|
||||||
error = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
pairs << d->sanitizeString( it.key() ).toUtf8() + " : " + serializedValue;
|
|
||||||
}
|
|
||||||
str += join( pairs, ", " );
|
|
||||||
str += " }";
|
|
||||||
} else if (( v.type() == QVariant::String ) || ( v.type() == QVariant::ByteArray )) { // a string or a byte array?
|
|
||||||
str = d->sanitizeString( v.toString() ).toUtf8();
|
|
||||||
} else if (( v.type() == QVariant::Double) || (v.type() == QMetaType::Float)) { // a double or a float?
|
|
||||||
const double value = v.toDouble();
|
|
||||||
#ifdef _WIN32
|
|
||||||
const bool special = _isnan(value) || !_finite(value);
|
|
||||||
#elif defined(Q_OS_SYMBIAN)
|
|
||||||
const bool special = isnan(value) || isinf(value);
|
|
||||||
#else
|
|
||||||
const bool special = std::isnan(value) || std::isinf(value);
|
|
||||||
#endif
|
|
||||||
if (special) {
|
|
||||||
if (specialNumbersAllowed()) {
|
|
||||||
#ifdef _WIN32
|
|
||||||
if (_isnan(value)) {
|
|
||||||
#elif defined(Q_OS_SYMBIAN)
|
|
||||||
if (isnan(value)) {
|
|
||||||
#else
|
|
||||||
if (std::isnan(value)) {
|
|
||||||
#endif
|
|
||||||
str += "NaN";
|
|
||||||
} else {
|
|
||||||
if (value<0) {
|
|
||||||
str += "-";
|
|
||||||
}
|
|
||||||
str += "Infinity";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qCritical("Attempt to write NaN or infinity, which is not supported by json");
|
|
||||||
error = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
str = QByteArray::number( value );
|
|
||||||
if( ! str.contains( "." ) && ! str.contains( "e" ) ) {
|
|
||||||
str += ".0";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if ( v.type() == QVariant::Bool ) { // boolean value?
|
|
||||||
str = ( v.toBool() ? "true" : "false" );
|
|
||||||
} else if ( v.type() == QVariant::ULongLong ) { // large unsigned number?
|
|
||||||
str = QByteArray::number( v.value<qulonglong>() );
|
|
||||||
} else if ( v.canConvert<qlonglong>() ) { // any signed number?
|
|
||||||
str = QByteArray::number( v.value<qlonglong>() );
|
|
||||||
} else if ( v.canConvert<QString>() ){ // can value be converted to string?
|
|
||||||
// this will catch QDate, QDateTime, QUrl, ...
|
|
||||||
str = d->sanitizeString( v.toString() ).toUtf8();
|
|
||||||
//TODO: catch other values like QImage, QRect, ...
|
|
||||||
} else {
|
|
||||||
error = true;
|
|
||||||
}
|
|
||||||
if ( !error )
|
|
||||||
return str;
|
|
||||||
else
|
|
||||||
return QByteArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
void QJson::Serializer::allowSpecialNumbers(bool allow) {
|
|
||||||
d->specialNumbersAllowed = allow;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QJson::Serializer::specialNumbersAllowed() const {
|
|
||||||
return d->specialNumbersAllowed;
|
|
||||||
}
|
|
@@ -1,81 +0,0 @@
|
|||||||
/* This file is part of qjson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2009 Till Adam <adam@kde.org>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QJSON_SERIALIZER_H
|
|
||||||
#define QJSON_SERIALIZER_H
|
|
||||||
|
|
||||||
#include "qjson_export.h"
|
|
||||||
|
|
||||||
class QIODevice;
|
|
||||||
class QString;
|
|
||||||
class QVariant;
|
|
||||||
|
|
||||||
namespace QJson {
|
|
||||||
/**
|
|
||||||
* @brief Main class used to convert QVariant objects to JSON data.
|
|
||||||
*
|
|
||||||
* QVariant objects are converted to a string containing the JSON data.
|
|
||||||
* If QVariant object is empty or not valid a <em>null</em> json object is returned.
|
|
||||||
*/
|
|
||||||
class QJSON_EXPORT Serializer {
|
|
||||||
public:
|
|
||||||
Serializer();
|
|
||||||
~Serializer();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method generates a textual JSON representation and outputs it to the
|
|
||||||
* passed in I/O Device.
|
|
||||||
* @param variant The JSON document in its in-memory representation as generated by the
|
|
||||||
* parser.
|
|
||||||
* @param out Input output device
|
|
||||||
* @param ok if a conversion error occurs, *ok is set to false; otherwise *ok is set to true
|
|
||||||
*/
|
|
||||||
void serialize( const QVariant& variant, QIODevice* out, bool* ok = 0 );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a method provided for convenience. It turns the passed in in-memory
|
|
||||||
* representation of the JSON document into a textual one, which is returned.
|
|
||||||
* If the returned string is empty, the document was empty. If it was null, there
|
|
||||||
* was a parsing error.
|
|
||||||
*
|
|
||||||
* @param variant The JSON document in its in-memory representation as generated by the
|
|
||||||
* parser.
|
|
||||||
*/
|
|
||||||
|
|
||||||
QByteArray serialize( const QVariant& variant );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allow or disallow writing of NaN and/or Infinity (as an extension to QJson)
|
|
||||||
*/
|
|
||||||
void allowSpecialNumbers(bool allow);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is Nan and/or Infinity allowed?
|
|
||||||
*/
|
|
||||||
bool specialNumbersAllowed() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
Q_DISABLE_COPY(Serializer)
|
|
||||||
class SerializerPrivate;
|
|
||||||
SerializerPrivate* const d;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // QJSON_SERIALIZER_H
|
|
@@ -1,60 +0,0 @@
|
|||||||
#include "serializerrunnable.h"
|
|
||||||
|
|
||||||
/* This file is part of qjson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2009 Flavio Castelli <flavio@castelli.name>
|
|
||||||
* 2009 Frank Osterfeld <osterfeld@kde.org>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "parserrunnable.h"
|
|
||||||
#include "serializer.h"
|
|
||||||
|
|
||||||
#include <QtCore/QDebug>
|
|
||||||
#include <QtCore/QVariant>
|
|
||||||
|
|
||||||
using namespace QJson;
|
|
||||||
|
|
||||||
class SerializerRunnable::Private
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
QVariant json;
|
|
||||||
};
|
|
||||||
|
|
||||||
SerializerRunnable::SerializerRunnable(QObject* parent)
|
|
||||||
: QObject(parent),
|
|
||||||
QRunnable(),
|
|
||||||
d(new Private)
|
|
||||||
{
|
|
||||||
qRegisterMetaType<QVariant>("QVariant");
|
|
||||||
}
|
|
||||||
|
|
||||||
SerializerRunnable::~SerializerRunnable()
|
|
||||||
{
|
|
||||||
delete d;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SerializerRunnable::setJsonObject( const QVariant& json )
|
|
||||||
{
|
|
||||||
d->json = json;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SerializerRunnable::run()
|
|
||||||
{
|
|
||||||
Serializer serializer;
|
|
||||||
emit parsingFinished( Serializer().serialize( d->json ), true, QString() );
|
|
||||||
}
|
|
@@ -1,74 +0,0 @@
|
|||||||
/* This file is part of qjson
|
|
||||||
*
|
|
||||||
* Copyright (C) 2009 Frank Osterfeld <osterfeld@kde.org>
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Library General Public
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 2 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
|
|
||||||
* Library General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Library General Public License
|
|
||||||
* along with this library; see the file COPYING.LIB. If not, write to
|
|
||||||
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
* Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef SERIALIZERRUNNABLE_H
|
|
||||||
#define SERIALIZERRUNNABLE_H
|
|
||||||
|
|
||||||
#include "qjson_export.h"
|
|
||||||
|
|
||||||
#include <QtCore/QObject>
|
|
||||||
#include <QtCore/QRunnable>
|
|
||||||
|
|
||||||
class QByteArray;
|
|
||||||
class QString;
|
|
||||||
class QVariant;
|
|
||||||
|
|
||||||
namespace QJson {
|
|
||||||
/**
|
|
||||||
* @brief Convenience class for converting JSON data to QVariant objects using a dedicated thread
|
|
||||||
*/
|
|
||||||
class QJSON_EXPORT SerializerRunnable : public QObject, public QRunnable
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
/**
|
|
||||||
* This signal is emitted when the conversion process has been completed
|
|
||||||
* @param data contains the JSON data that has to be converted
|
|
||||||
* @param parent parent of the object
|
|
||||||
**/
|
|
||||||
explicit SerializerRunnable(QObject* parent = 0);
|
|
||||||
~SerializerRunnable();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the json object to serialize.
|
|
||||||
*
|
|
||||||
* @param json QVariant containing the json representation to be serialized
|
|
||||||
*/
|
|
||||||
void setJsonObject( const QVariant& json );
|
|
||||||
|
|
||||||
/* reimp */ void run();
|
|
||||||
|
|
||||||
Q_SIGNALS:
|
|
||||||
/**
|
|
||||||
* This signal is emitted when the serialization process has been completed
|
|
||||||
* @param serialized contains the result of the serialization
|
|
||||||
* @param ok if a serialization error occurs ok is set to false, otherwise it's set to true.
|
|
||||||
* @param error_msg contains a string explaining the failure reason
|
|
||||||
**/
|
|
||||||
void parsingFinished(const QByteArray& serialized, bool ok, const QString& error_msg);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Q_DISABLE_COPY(SerializerRunnable)
|
|
||||||
class Private;
|
|
||||||
Private* const d;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // SERIALIZERRUNNABLE_H
|
|
70
thirdparty/qtweetlib/qtweetlib/qjson/src.pro
vendored
70
thirdparty/qtweetlib/qtweetlib/qjson/src.pro
vendored
@@ -1,70 +0,0 @@
|
|||||||
QJSON_BASE = ..
|
|
||||||
QJSON_SRCBASE = .
|
|
||||||
|
|
||||||
TEMPLATE = lib
|
|
||||||
QT -= gui
|
|
||||||
TARGET = qjson
|
|
||||||
DESTDIR = $$QJSON_BASE/lib
|
|
||||||
CONFIG += create_prl
|
|
||||||
|
|
||||||
VERSION = 0.7.1
|
|
||||||
|
|
||||||
windows: {
|
|
||||||
DEFINES += QJSON_MAKEDLL
|
|
||||||
}
|
|
||||||
|
|
||||||
QJSON_CPP = $$QJSON_SRCBASE
|
|
||||||
INCLUDEPATH += $$QJSON_CPP
|
|
||||||
|
|
||||||
PRIVATE_HEADERS += \
|
|
||||||
json_parser.hh \
|
|
||||||
json_scanner.h \
|
|
||||||
location.hh \
|
|
||||||
parser_p.h \
|
|
||||||
position.hh \
|
|
||||||
qjson_debug.h \
|
|
||||||
stack.hh
|
|
||||||
|
|
||||||
PUBLIC_HEADERS += \
|
|
||||||
parser.h \
|
|
||||||
parserrunnable.h \
|
|
||||||
qobjecthelper.h \
|
|
||||||
serializer.h \
|
|
||||||
serializerrunnable.h \
|
|
||||||
qjson_export.h
|
|
||||||
|
|
||||||
HEADERS += $$PRIVATE_HEADERS $$PUBLIC_HEADERS
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
json_parser.cc \
|
|
||||||
json_scanner.cpp \
|
|
||||||
parser.cpp \
|
|
||||||
parserrunnable.cpp \
|
|
||||||
qobjecthelper.cpp \
|
|
||||||
serializer.cpp \
|
|
||||||
serializerrunnable.cpp
|
|
||||||
|
|
||||||
symbian: {
|
|
||||||
DEFINES += QJSON_MAKEDLL
|
|
||||||
#export public header to \epocroot\epoc32\include to be able to use them
|
|
||||||
headers.files = $$PUBLIC_HEADERS
|
|
||||||
headers.path = $$PWD
|
|
||||||
for(header, headers.files) {
|
|
||||||
{BLD_INF_RULES.prj_exports += "$$header"}
|
|
||||||
}
|
|
||||||
|
|
||||||
TARGET.EPOCALLOWDLLDATA = 1
|
|
||||||
# uid for the dll
|
|
||||||
#TARGET.UID3=
|
|
||||||
TARGET.CAPABILITY = ReadDeviceData WriteDeviceData
|
|
||||||
|
|
||||||
# do not freeze api-> no libs produced. Comment when freezing!
|
|
||||||
# run "abld freeze winscw" to create def files
|
|
||||||
symbian:MMP_RULES += "EXPORTUNFROZEN"
|
|
||||||
|
|
||||||
# add dll to the sis
|
|
||||||
QjsonDeployment.sources = $${TARGET}.dll
|
|
||||||
QjsonDeployment.path = /sys/bin
|
|
||||||
|
|
||||||
DEPLOYMENT += QjsonDeployment
|
|
||||||
}
|
|
129
thirdparty/qtweetlib/qtweetlib/qjson/stack.hh
vendored
129
thirdparty/qtweetlib/qtweetlib/qjson/stack.hh
vendored
@@ -1,129 +0,0 @@
|
|||||||
/* A Bison parser, made by GNU Bison 2.3. */
|
|
||||||
|
|
||||||
/* Stack handling for Bison parsers in C++
|
|
||||||
|
|
||||||
Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
||||||
Boston, MA 02110-1301, USA. */
|
|
||||||
|
|
||||||
/* As a special exception, you may create a larger work that contains
|
|
||||||
part or all of the Bison parser skeleton and distribute that work
|
|
||||||
under terms of your choice, so long as that work isn't itself a
|
|
||||||
parser generator using the skeleton or a modified version thereof
|
|
||||||
as a parser skeleton. Alternatively, if you modify or redistribute
|
|
||||||
the parser skeleton itself, you may (at your option) remove this
|
|
||||||
special exception, which will cause the skeleton and the resulting
|
|
||||||
Bison output files to be licensed under the GNU General Public
|
|
||||||
License without this special exception.
|
|
||||||
|
|
||||||
This special exception was added by the Free Software Foundation in
|
|
||||||
version 2.2 of Bison. */
|
|
||||||
|
|
||||||
#ifndef BISON_STACK_HH
|
|
||||||
# define BISON_STACK_HH
|
|
||||||
|
|
||||||
#include <deque>
|
|
||||||
|
|
||||||
namespace yy
|
|
||||||
{
|
|
||||||
template <class T, class S = std::deque<T> >
|
|
||||||
class stack
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
// Hide our reversed order.
|
|
||||||
typedef typename S::reverse_iterator iterator;
|
|
||||||
typedef typename S::const_reverse_iterator const_iterator;
|
|
||||||
|
|
||||||
stack () : seq_ ()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
stack (unsigned int n) : seq_ (n)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
T&
|
|
||||||
operator [] (unsigned int i)
|
|
||||||
{
|
|
||||||
return seq_[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
const T&
|
|
||||||
operator [] (unsigned int i) const
|
|
||||||
{
|
|
||||||
return seq_[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
void
|
|
||||||
push (const T& t)
|
|
||||||
{
|
|
||||||
seq_.push_front (t);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
void
|
|
||||||
pop (unsigned int n = 1)
|
|
||||||
{
|
|
||||||
for (; n; --n)
|
|
||||||
seq_.pop_front ();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
unsigned int
|
|
||||||
height () const
|
|
||||||
{
|
|
||||||
return seq_.size ();
|
|
||||||
}
|
|
||||||
|
|
||||||
inline const_iterator begin () const { return seq_.rbegin (); }
|
|
||||||
inline const_iterator end () const { return seq_.rend (); }
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
S seq_;
|
|
||||||
};
|
|
||||||
|
|
||||||
/// Present a slice of the top of a stack.
|
|
||||||
template <class T, class S = stack<T> >
|
|
||||||
class slice
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
|
|
||||||
slice (const S& stack,
|
|
||||||
unsigned int range) : stack_ (stack),
|
|
||||||
range_ (range)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
|
||||||
const T&
|
|
||||||
operator [] (unsigned int i) const
|
|
||||||
{
|
|
||||||
return stack_[range_ - i];
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
const S& stack_;
|
|
||||||
unsigned int range_;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // not BISON_STACK_HH
|
|
340
thirdparty/qtweetlib/qtweetlib/src/oauth.cpp
vendored
340
thirdparty/qtweetlib/qtweetlib/src/oauth.cpp
vendored
@@ -1,340 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QDateTime>
|
|
||||||
#include <QtAlgorithms>
|
|
||||||
#include <QCryptographicHash>
|
|
||||||
#include <QtDebug>
|
|
||||||
#include "oauth.h"
|
|
||||||
|
|
||||||
#ifndef CONSUMER_KEY
|
|
||||||
#define CONSUMER_KEY ""
|
|
||||||
#endif //CONSUMER_KEY
|
|
||||||
|
|
||||||
#ifndef CONSUMER_SECRET
|
|
||||||
#define CONSUMER_SECRET ""
|
|
||||||
#endif //CONSUMER_SECRET
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates HMAC-SHA1 signature
|
|
||||||
* @param message for which to create signature
|
|
||||||
* @param key
|
|
||||||
*/
|
|
||||||
static QByteArray hmacSha1(const QByteArray& message, const QByteArray& key)
|
|
||||||
{
|
|
||||||
QByteArray normKey;
|
|
||||||
|
|
||||||
if (key.size() > 64) {
|
|
||||||
normKey = QCryptographicHash::hash(key, QCryptographicHash::Sha1);
|
|
||||||
} else {
|
|
||||||
normKey = key; // no need for zero padding ipad and opad are filled with zeros
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned char* K = (unsigned char *)normKey.constData();
|
|
||||||
|
|
||||||
unsigned char ipad[65];
|
|
||||||
unsigned char opad[65];
|
|
||||||
|
|
||||||
memset(ipad, 0, 65);
|
|
||||||
memset(opad, 0, 65);
|
|
||||||
|
|
||||||
memcpy(ipad, K, normKey.size());
|
|
||||||
memcpy(opad, K, normKey.size());
|
|
||||||
|
|
||||||
for (int i = 0; i < 64; ++i) {
|
|
||||||
ipad[i] ^= 0x36;
|
|
||||||
opad[i] ^= 0x5c;
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray context;
|
|
||||||
context.append((const char *)ipad, 64);
|
|
||||||
context.append(message);
|
|
||||||
|
|
||||||
QByteArray sha1 = QCryptographicHash::hash(context, QCryptographicHash::Sha1);
|
|
||||||
|
|
||||||
context.clear();
|
|
||||||
context.append((const char *)opad, 64);
|
|
||||||
context.append(sha1);
|
|
||||||
|
|
||||||
sha1.clear();
|
|
||||||
|
|
||||||
sha1 = QCryptographicHash::hash(context, QCryptographicHash::Sha1);
|
|
||||||
|
|
||||||
return sha1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates time stamp
|
|
||||||
* @return time stamp in epoch time
|
|
||||||
*/
|
|
||||||
static QByteArray generateTimeStamp()
|
|
||||||
{
|
|
||||||
//OAuth spec. 8 http://oauth.net/core/1.0/#nonce
|
|
||||||
QDateTime current = QDateTime::currentDateTime();
|
|
||||||
uint seconds = current.toTime_t();
|
|
||||||
|
|
||||||
return QString("%1").arg(seconds).toUtf8();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates random 16 length string
|
|
||||||
* @return random string
|
|
||||||
*/
|
|
||||||
static QByteArray generateNonce()
|
|
||||||
{
|
|
||||||
//OAuth spec. 8 http://oauth.net/core/1.0/#nonce
|
|
||||||
QByteArray chars("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
|
|
||||||
int max = chars.size();
|
|
||||||
|
|
||||||
int len = 16;
|
|
||||||
|
|
||||||
QByteArray nonce;
|
|
||||||
for(int i = 0; i < len; ++i){
|
|
||||||
nonce.append( chars[qrand() % max] );
|
|
||||||
}
|
|
||||||
|
|
||||||
return nonce;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
OAuth::OAuth(QObject *parent)
|
|
||||||
: QObject(parent),
|
|
||||||
m_oauthConsumerKey(CONSUMER_KEY),
|
|
||||||
m_oauthConsumerSecret(CONSUMER_SECRET)
|
|
||||||
{
|
|
||||||
QDateTime current = QDateTime::currentDateTime();
|
|
||||||
qsrand(current.toTime_t());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param consumerKey oauth consumer key
|
|
||||||
* @param consumerSecret oauth consumer secret
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
OAuth::OAuth(const QByteArray &consumerKey, const QByteArray &consumerSecret, QObject *parent)
|
|
||||||
: QObject(parent),
|
|
||||||
m_oauthConsumerKey(consumerKey),
|
|
||||||
m_oauthConsumerSecret(consumerSecret)
|
|
||||||
{
|
|
||||||
QDateTime current = QDateTime::currentDateTime();
|
|
||||||
qsrand(current.toTime_t());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses oauth_token and oauth_token_secret from response of the service provider
|
|
||||||
* and sets m_oauthToken and m_oauthTokenSecret accordingly
|
|
||||||
* @param response response from service provider
|
|
||||||
*/
|
|
||||||
void OAuth::parseTokens(const QByteArray& response)
|
|
||||||
{
|
|
||||||
//OAuth spec 5.3, 6.1.2, 6.3.2
|
|
||||||
//use QUrl for parsing
|
|
||||||
QByteArray parseQuery("http://parse.com?");
|
|
||||||
|
|
||||||
QUrl parseUrl = QUrl::fromEncoded(parseQuery + response);
|
|
||||||
|
|
||||||
m_oauthToken = parseUrl.encodedQueryItemValue("oauth_token");
|
|
||||||
m_oauthTokenSecret = parseUrl.encodedQueryItemValue("oauth_token_secret");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets oauth token
|
|
||||||
* @param token OAuth token
|
|
||||||
*/
|
|
||||||
void OAuth::setOAuthToken(const QByteArray& token)
|
|
||||||
{
|
|
||||||
m_oauthToken = token;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets OAauth token secret
|
|
||||||
* @param tokenSecret OAuth token secret
|
|
||||||
*/
|
|
||||||
void OAuth::setOAuthTokenSecret(const QByteArray& tokenSecret)
|
|
||||||
{
|
|
||||||
m_oauthTokenSecret = tokenSecret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets oauth_token
|
|
||||||
* @return OAuth token
|
|
||||||
*/
|
|
||||||
QByteArray OAuth::oauthToken() const
|
|
||||||
{
|
|
||||||
return m_oauthToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets oauth_token_secret
|
|
||||||
* @return OAuth token secret
|
|
||||||
*/
|
|
||||||
QByteArray OAuth::oauthTokenSecret() const
|
|
||||||
{
|
|
||||||
return m_oauthTokenSecret;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clears the oauth tokens
|
|
||||||
*/
|
|
||||||
void OAuth::clearTokens()
|
|
||||||
{
|
|
||||||
m_oauthToken.clear();
|
|
||||||
m_oauthTokenSecret.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates HMAC-SHA1 signature
|
|
||||||
* @param signatureBase signature base
|
|
||||||
* @return HMAC-SHA1 signature
|
|
||||||
*/
|
|
||||||
QByteArray OAuth::generateSignatureHMACSHA1(const QByteArray& signatureBase)
|
|
||||||
{
|
|
||||||
//OAuth spec. 9.2 http://oauth.net/core/1.0/#anchor16
|
|
||||||
QByteArray key = m_oauthConsumerSecret + '&' + m_oauthTokenSecret;
|
|
||||||
|
|
||||||
QByteArray result = hmacSha1(signatureBase, key);
|
|
||||||
QByteArray resultBE64 = result.toBase64();
|
|
||||||
QByteArray resultPE = resultBE64.toPercentEncoding();
|
|
||||||
return resultPE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates OAuth signature base
|
|
||||||
* @param url Url with encoded parameters
|
|
||||||
* @param method Http method
|
|
||||||
* @param timestamp timestamp
|
|
||||||
* @param nonce random string
|
|
||||||
* @return signature base
|
|
||||||
*/
|
|
||||||
QByteArray OAuth::generateSignatureBase(const QUrl& url, HttpMethod method, const QByteArray& timestamp, const QByteArray& nonce)
|
|
||||||
{
|
|
||||||
//OAuth spec. 9.1 http://oauth.net/core/1.0/#anchor14
|
|
||||||
|
|
||||||
//OAuth spec. 9.1.1
|
|
||||||
QList<QPair<QByteArray, QByteArray> > urlParameters = url.encodedQueryItems();
|
|
||||||
QList<QByteArray> normParameters;
|
|
||||||
|
|
||||||
QListIterator<QPair<QByteArray, QByteArray> > i(urlParameters);
|
|
||||||
while(i.hasNext()){
|
|
||||||
QPair<QByteArray, QByteArray> queryItem = i.next();
|
|
||||||
QByteArray normItem = queryItem.first + '=' + queryItem.second;
|
|
||||||
normParameters.append(normItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
//consumer key
|
|
||||||
normParameters.append(QByteArray("oauth_consumer_key=") + m_oauthConsumerKey);
|
|
||||||
|
|
||||||
//token
|
|
||||||
if(!m_oauthToken.isEmpty()){
|
|
||||||
normParameters.append(QByteArray("oauth_token=") + m_oauthToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
//signature method, only HMAC_SHA1
|
|
||||||
normParameters.append(QByteArray("oauth_signature_method=HMAC-SHA1"));
|
|
||||||
//time stamp
|
|
||||||
normParameters.append(QByteArray("oauth_timestamp=") + timestamp);
|
|
||||||
//nonce
|
|
||||||
normParameters.append(QByteArray("oauth_nonce=") + nonce);
|
|
||||||
//version
|
|
||||||
normParameters.append(QByteArray("oauth_version=1.0"));
|
|
||||||
|
|
||||||
//OAuth spec. 9.1.1.1
|
|
||||||
qSort(normParameters);
|
|
||||||
|
|
||||||
//OAuth spec. 9.1.1.2
|
|
||||||
//QByteArray normString;
|
|
||||||
//QListIterator<QByteArray> j(normParameters);
|
|
||||||
//while(j.hasNext()){
|
|
||||||
// normString += j.next();
|
|
||||||
// normString += '&';
|
|
||||||
//}
|
|
||||||
//normString.chop(1);
|
|
||||||
|
|
||||||
QByteArray normString;
|
|
||||||
QListIterator<QByteArray> j(normParameters);
|
|
||||||
while (j.hasNext()) {
|
|
||||||
normString += j.next().toPercentEncoding();
|
|
||||||
normString += "%26";
|
|
||||||
}
|
|
||||||
normString.chop(3);
|
|
||||||
|
|
||||||
//OAuth spec. 9.1.2
|
|
||||||
QString urlScheme = url.scheme();
|
|
||||||
QString urlPath = url.path();
|
|
||||||
QString urlHost = url.host();
|
|
||||||
QByteArray normUrl = urlScheme.toUtf8() + "://" + urlHost.toUtf8() + urlPath.toUtf8();
|
|
||||||
|
|
||||||
QByteArray httpm;
|
|
||||||
|
|
||||||
switch (method)
|
|
||||||
{
|
|
||||||
case OAuth::GET:
|
|
||||||
httpm = "GET";
|
|
||||||
break;
|
|
||||||
case OAuth::POST:
|
|
||||||
httpm = "POST";
|
|
||||||
break;
|
|
||||||
case OAuth::DELETE:
|
|
||||||
httpm = "DELETE";
|
|
||||||
break;
|
|
||||||
case OAuth::PUT:
|
|
||||||
httpm = "PUT";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//OAuth spec. 9.1.3
|
|
||||||
return httpm + '&' + normUrl.toPercentEncoding() + '&' + normString;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates Authorization Header
|
|
||||||
* @param url url with query items embedded
|
|
||||||
* @param method type of http method
|
|
||||||
* @remarks If HttpMethod is POST put query items in url (QUrl::addEncodedQueryItem)
|
|
||||||
*/
|
|
||||||
QByteArray OAuth::generateAuthorizationHeader( const QUrl& url, HttpMethod method )
|
|
||||||
{
|
|
||||||
if (m_oauthToken.isEmpty() && m_oauthTokenSecret.isEmpty())
|
|
||||||
qDebug() << "OAuth tokens are empty!";
|
|
||||||
|
|
||||||
QByteArray timeStamp = generateTimeStamp();
|
|
||||||
QByteArray nonce = generateNonce();
|
|
||||||
|
|
||||||
QByteArray sigBase = generateSignatureBase(url, method, timeStamp, nonce);
|
|
||||||
QByteArray signature = generateSignatureHMACSHA1(sigBase);
|
|
||||||
|
|
||||||
QByteArray header;
|
|
||||||
header += "OAuth ";
|
|
||||||
header += "oauth_consumer_key=\"" + m_oauthConsumerKey + "\",";
|
|
||||||
if(!m_oauthToken.isEmpty())
|
|
||||||
header += "oauth_token=\"" + m_oauthToken + "\",";
|
|
||||||
header += "oauth_signature_method=\"HMAC-SHA1\",";
|
|
||||||
header += "oauth_signature=\"" + signature + "\",";
|
|
||||||
header += "oauth_timestamp=\"" + timeStamp + "\",";
|
|
||||||
header += "oauth_nonce=\"" + nonce + "\",";
|
|
||||||
header += "oauth_version=\"1.0\"";
|
|
||||||
|
|
||||||
return header;
|
|
||||||
}
|
|
67
thirdparty/qtweetlib/qtweetlib/src/oauth.h
vendored
67
thirdparty/qtweetlib/qtweetlib/src/oauth.h
vendored
@@ -1,67 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef OAUTH_H
|
|
||||||
#define OAUTH_H
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <QUrl>
|
|
||||||
#include "qtweetlib_global.h"
|
|
||||||
|
|
||||||
class QByteArray;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base OAuth class
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT OAuth : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
Q_ENUMS(HttpMethod)
|
|
||||||
Q_PROPERTY(QByteArray oauthToken READ oauthToken WRITE setOAuthToken)
|
|
||||||
Q_PROPERTY(QByteArray oauthTokenSecret READ oauthTokenSecret WRITE setOAuthTokenSecret)
|
|
||||||
|
|
||||||
public:
|
|
||||||
OAuth(QObject *parent = 0);
|
|
||||||
OAuth(const QByteArray& consumerKey, const QByteArray& consumerSecret, QObject *parent = 0);
|
|
||||||
#undef GET
|
|
||||||
#undef POST
|
|
||||||
#undef PUT
|
|
||||||
#undef DELETE
|
|
||||||
enum HttpMethod {GET, POST, PUT, DELETE};
|
|
||||||
|
|
||||||
void parseTokens(const QByteArray& response);
|
|
||||||
QByteArray generateAuthorizationHeader(const QUrl& url, HttpMethod method);
|
|
||||||
void setOAuthToken(const QByteArray& token);
|
|
||||||
void setOAuthTokenSecret(const QByteArray& tokenSecret);
|
|
||||||
void clearTokens();
|
|
||||||
QByteArray oauthToken() const;
|
|
||||||
QByteArray oauthTokenSecret() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
QByteArray generateSignatureHMACSHA1(const QByteArray& signatureBase);
|
|
||||||
QByteArray generateSignatureBase(const QUrl& url, HttpMethod method, const QByteArray& timestamp, const QByteArray& nonce);
|
|
||||||
|
|
||||||
QByteArray m_oauthToken;
|
|
||||||
QByteArray m_oauthTokenSecret;
|
|
||||||
QByteArray m_oauthConsumerSecret;
|
|
||||||
QByteArray m_oauthConsumerKey;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //OAUTH_H
|
|
216
thirdparty/qtweetlib/qtweetlib/src/oauthtwitter.cpp
vendored
216
thirdparty/qtweetlib/qtweetlib/src/oauthtwitter.cpp
vendored
@@ -1,216 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "oauthtwitter.h"
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QUrl>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include <QTimer>
|
|
||||||
#include <QNetworkAccessManager>
|
|
||||||
#include <QEventLoop>
|
|
||||||
#include <QDesktopServices>
|
|
||||||
|
|
||||||
#define TWITTER_REQUEST_TOKEN_URL "http://twitter.com/oauth/request_token"
|
|
||||||
#define TWITTER_ACCESS_TOKEN_URL "http://twitter.com/oauth/access_token"
|
|
||||||
#define TWITTER_AUTHORIZE_URL "http://twitter.com/oauth/authorize"
|
|
||||||
#define TWITTER_ACCESS_TOKEN_XAUTH_URL "https://api.twitter.com/oauth/access_token"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
OAuthTwitter::OAuthTwitter(QObject *parent)
|
|
||||||
: OAuth(parent), m_netManager(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
OAuthTwitter::OAuthTwitter(QNetworkAccessManager *netManager, QObject *parent) :
|
|
||||||
OAuth(parent), m_netManager(netManager)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets network access manager
|
|
||||||
* @remarks Must be set to work properly
|
|
||||||
*/
|
|
||||||
void OAuthTwitter::setNetworkAccessManager(QNetworkAccessManager* netManager)
|
|
||||||
{
|
|
||||||
m_netManager = netManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets network access manager
|
|
||||||
*/
|
|
||||||
QNetworkAccessManager* OAuthTwitter::networkAccessManager() const
|
|
||||||
{
|
|
||||||
return m_netManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets oauth tokens using XAuth method (starts authorization process)
|
|
||||||
* @param username username
|
|
||||||
* @param password password
|
|
||||||
* @remarks Async, emits authorizeXAuthFinished or authorizeXAuthError when there is error
|
|
||||||
*/
|
|
||||||
void OAuthTwitter::authorizeXAuth(const QString &username, const QString &password)
|
|
||||||
{
|
|
||||||
Q_ASSERT(m_netManager != 0);
|
|
||||||
|
|
||||||
QUrl url(TWITTER_ACCESS_TOKEN_XAUTH_URL);
|
|
||||||
url.addQueryItem("x_auth_username", username);
|
|
||||||
url.addQueryItem("x_auth_password", password);
|
|
||||||
url.addQueryItem("x_auth_mode", "client_auth");
|
|
||||||
|
|
||||||
QByteArray oauthHeader = generateAuthorizationHeader(url, OAuth::POST);
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QNetworkReply *reply = m_netManager->post(req, QByteArray());
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(finishedAuthorization()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when authorization is finished
|
|
||||||
*/
|
|
||||||
void OAuthTwitter::finishedAuthorization()
|
|
||||||
{
|
|
||||||
QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
|
|
||||||
if (reply) {
|
|
||||||
if (reply->error() == QNetworkReply::NoError) {
|
|
||||||
QByteArray response = reply->readAll();
|
|
||||||
parseTokens(response);
|
|
||||||
|
|
||||||
emit authorizeXAuthFinished();
|
|
||||||
} else {
|
|
||||||
//dump error
|
|
||||||
qDebug() << "Network Error: " << reply->error();
|
|
||||||
qDebug() << "Response error: " << reply->readAll();
|
|
||||||
emit authorizeXAuthError();
|
|
||||||
|
|
||||||
}
|
|
||||||
reply->deleteLater();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts PIN based OAuth authorization
|
|
||||||
*/
|
|
||||||
void OAuthTwitter::authorizePin()
|
|
||||||
{
|
|
||||||
Q_ASSERT(m_netManager != 0);
|
|
||||||
|
|
||||||
QUrl url(TWITTER_REQUEST_TOKEN_URL);
|
|
||||||
|
|
||||||
QByteArray oauthHeader = generateAuthorizationHeader(url, OAuth::POST);
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
//enters event loop
|
|
||||||
QEventLoop q;
|
|
||||||
QTimer t;
|
|
||||||
t.setSingleShot(true);
|
|
||||||
connect(&t, SIGNAL(timeout()), &q, SLOT(quit()));
|
|
||||||
|
|
||||||
QNetworkReply *reply = m_netManager->post(req, QByteArray());
|
|
||||||
connect(reply, SIGNAL(finished()), &q, SLOT(quit()));
|
|
||||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(error()));
|
|
||||||
|
|
||||||
t.start(5000);
|
|
||||||
q.exec();
|
|
||||||
|
|
||||||
if (t.isActive()) {
|
|
||||||
t.stop();
|
|
||||||
QByteArray response = reply->readAll();
|
|
||||||
parseTokens(response);
|
|
||||||
|
|
||||||
reply->deleteLater();
|
|
||||||
requestAuthorization();
|
|
||||||
|
|
||||||
int pin = authorizationWidget();
|
|
||||||
if (pin) {
|
|
||||||
requestAccessToken(pin);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
qDebug() << "Timeout";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens authorization url
|
|
||||||
* @remarks Override if you want to show another browser
|
|
||||||
*/
|
|
||||||
void OAuthTwitter::requestAuthorization()
|
|
||||||
{
|
|
||||||
QUrl authorizeUrl(TWITTER_AUTHORIZE_URL);
|
|
||||||
authorizeUrl.addEncodedQueryItem("oauth_token", oauthToken());
|
|
||||||
|
|
||||||
QDesktopServices::openUrl(authorizeUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets access tokens for user entered pin number
|
|
||||||
* @param pin entered pin number
|
|
||||||
*/
|
|
||||||
void OAuthTwitter::requestAccessToken(int pin)
|
|
||||||
{
|
|
||||||
Q_ASSERT(m_netManager != 0);
|
|
||||||
|
|
||||||
QUrl url(TWITTER_ACCESS_TOKEN_URL);
|
|
||||||
url.addEncodedQueryItem("oauth_verifier", QByteArray::number(pin));
|
|
||||||
|
|
||||||
QByteArray oauthHeader = generateAuthorizationHeader(url, OAuth::POST);
|
|
||||||
|
|
||||||
QEventLoop q;
|
|
||||||
QTimer t;
|
|
||||||
t.setSingleShot(true);
|
|
||||||
|
|
||||||
connect(&t, SIGNAL(timeout()), &q, SLOT(quit()));
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QNetworkReply *reply = m_netManager->post(req, QByteArray());
|
|
||||||
connect(reply, SIGNAL(finished()), &q, SLOT(quit()));
|
|
||||||
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(error()));
|
|
||||||
|
|
||||||
t.start(5000);
|
|
||||||
q.exec();
|
|
||||||
|
|
||||||
if(t.isActive()){
|
|
||||||
QByteArray response = reply->readAll();
|
|
||||||
parseTokens(response);
|
|
||||||
reply->deleteLater();
|
|
||||||
} else {
|
|
||||||
qDebug() << "Timeout";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Override to show the authorization widget where users enters pin number
|
|
||||||
* @return entered pin number by the user
|
|
||||||
*/
|
|
||||||
int OAuthTwitter::authorizationWidget()
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -1,65 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef OAUTHTWITTER_H
|
|
||||||
#define OAUTHTWITTER_H
|
|
||||||
|
|
||||||
#include "oauth.h"
|
|
||||||
|
|
||||||
class QNetworkAccessManager;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OAuth Twitter authorization class
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT OAuthTwitter : public OAuth
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
Q_PROPERTY(QNetworkAccessManager* networkAccessManager
|
|
||||||
READ networkAccessManager
|
|
||||||
WRITE setNetworkAccessManager)
|
|
||||||
public:
|
|
||||||
OAuthTwitter(QObject *parent = 0);
|
|
||||||
OAuthTwitter(QNetworkAccessManager* netManager, QObject *parent = 0);
|
|
||||||
void setNetworkAccessManager(QNetworkAccessManager* netManager);
|
|
||||||
QNetworkAccessManager* networkAccessManager() const;
|
|
||||||
void authorizeXAuth(const QString& username, const QString& password);
|
|
||||||
void authorizePin();
|
|
||||||
|
|
||||||
signals:
|
|
||||||
/** Emited when XAuth authorization is finished */
|
|
||||||
void authorizeXAuthFinished();
|
|
||||||
/** Emited when there is error in XAuth authorization */
|
|
||||||
// ### TODO Error detection
|
|
||||||
// Sigh, bad documentation on errors in twitter api
|
|
||||||
void authorizeXAuthError();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
virtual int authorizationWidget();
|
|
||||||
virtual void requestAuthorization();
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void finishedAuthorization();
|
|
||||||
void requestAccessToken(int pin);
|
|
||||||
|
|
||||||
private:
|
|
||||||
QNetworkAccessManager *m_netManager;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif //OAUTHTWITTER_H
|
|
@@ -1,78 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include "qtweetaccountratelimitstatus.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
QTweetAccountRateLimitStatus::QTweetAccountRateLimitStatus(QObject *parent) :
|
|
||||||
QTweetNetBase(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param oauthTwitter OAuthTwitter object
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
QTweetAccountRateLimitStatus::QTweetAccountRateLimitStatus(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QTweetNetBase(oauthTwitter, parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts checking rate limit status
|
|
||||||
* @remarks Should be emiting rateLimitInfo signal after finishing
|
|
||||||
*/
|
|
||||||
void QTweetAccountRateLimitStatus::check()
|
|
||||||
{
|
|
||||||
QUrl url("http://api.twitter.com/1/account/rate_limit_status.json");
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
if (isAuthenticationEnabled()) {
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::GET);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->get(req);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetAccountRateLimitStatus::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
|
|
||||||
{
|
|
||||||
if (ok) {
|
|
||||||
QVariantMap respMap = json.toMap();
|
|
||||||
|
|
||||||
int remainingHits = respMap["remaining_hits"].toInt();
|
|
||||||
int resetTime = respMap["reset_time_in_seconds"].toInt();
|
|
||||||
int hourlyLimit = respMap["hourly_limit"].toInt();
|
|
||||||
|
|
||||||
emit rateLimitInfo(remainingHits, resetTime, hourlyLimit);
|
|
||||||
} else {
|
|
||||||
qDebug() << "QTweetAccountRateLimitStatus parser error: " << errorMsg;
|
|
||||||
setLastErrorMessage(errorMsg);
|
|
||||||
emit error(JsonParsingError, errorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,50 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETACCOUNTRATELIMITSTATUS_H
|
|
||||||
#define QTWEETACCOUNTRATELIMITSTATUS_H
|
|
||||||
|
|
||||||
#include "qtweetnetbase.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the remaining number of API requests available to the requesting user
|
|
||||||
* before the API limit is reached for the current hour.
|
|
||||||
*/
|
|
||||||
class QTweetAccountRateLimitStatus : public QTweetNetBase
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QTweetAccountRateLimitStatus(QObject *parent = 0);
|
|
||||||
QTweetAccountRateLimitStatus(OAuthTwitter *oauthTwitter, QObject *parent = 0);
|
|
||||||
void check();
|
|
||||||
|
|
||||||
signals:
|
|
||||||
/** Emits rate limit info
|
|
||||||
* @param remainingHits Remaining hits
|
|
||||||
* @param resetTime Reset time in seconds
|
|
||||||
* @param hourlyLimit
|
|
||||||
*/
|
|
||||||
void rateLimitInfo(int remainingHits, int resetTime, int hourlyLimit);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETACCOUNTRATELIMITSTATUS_H
|
|
@@ -1,82 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include "qtweetaccountverifycredentials.h"
|
|
||||||
#include "qtweetuser.h"
|
|
||||||
#include "qtweetconvert.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
QTweetAccountVerifyCredentials::QTweetAccountVerifyCredentials(QObject *parent) :
|
|
||||||
QTweetNetBase(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param oauthTwitter OAuthTwitter object
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
QTweetAccountVerifyCredentials::QTweetAccountVerifyCredentials(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QTweetNetBase(oauthTwitter, parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verifies credentials
|
|
||||||
* @param includeEntities when set to either true, t or 1, each tweet will include a node called "entities,".
|
|
||||||
*/
|
|
||||||
void QTweetAccountVerifyCredentials::verify(bool includeEntities)
|
|
||||||
{
|
|
||||||
if (!isAuthenticationEnabled()) {
|
|
||||||
qCritical("Needs authentication to be enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl url("http://api.twitter.com/1/account/verify_credentials.json");
|
|
||||||
|
|
||||||
if (includeEntities)
|
|
||||||
url.addQueryItem("include_entities", "true");
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::GET);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->get(req);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetAccountVerifyCredentials::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
|
|
||||||
{
|
|
||||||
if (ok) {
|
|
||||||
QTweetUser user = QTweetConvert::variantMapToUserInfo(json.toMap());
|
|
||||||
|
|
||||||
emit parsedUser(user);
|
|
||||||
} else {
|
|
||||||
qDebug() << "QTweetAccountVerifyCredentials parser error: " << errorMsg;
|
|
||||||
setLastErrorMessage(errorMsg);
|
|
||||||
emit error(JsonParsingError, errorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,47 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETACCOUNTVERIFYCREDENTIALS_H
|
|
||||||
#define QTWEETACCOUNTVERIFYCREDENTIALS_H
|
|
||||||
|
|
||||||
#include "qtweetnetbase.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks credentials of a authenticated user. Should emit parsedUser signal
|
|
||||||
* if authentication was successful, error if not. Use this to test if
|
|
||||||
* supplied user credentials are valid
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT QTweetAccountVerifyCredentials : public QTweetNetBase
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QTweetAccountVerifyCredentials(QObject *parent = 0);
|
|
||||||
QTweetAccountVerifyCredentials(OAuthTwitter *oauthTwitter, QObject *parent = 0);
|
|
||||||
void verify(bool includeEntities = false);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
/** Emits parsed user when credentials are valid */
|
|
||||||
void parsedUser(const QTweetUser& user);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETACCOUNTVERIFYCREDENTIALS_H
|
|
522
thirdparty/qtweetlib/qtweetlib/src/qtweetconvert.cpp
vendored
522
thirdparty/qtweetlib/qtweetlib/src/qtweetconvert.cpp
vendored
@@ -1,522 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "qtweetconvert.h"
|
|
||||||
#include "qtweetstatus.h"
|
|
||||||
#include "qtweetdmstatus.h"
|
|
||||||
#include "qtweetuser.h"
|
|
||||||
#include "qtweetlist.h"
|
|
||||||
#include "qtweetplace.h"
|
|
||||||
#include "qtweetsearchresult.h"
|
|
||||||
#include "qtweetsearchpageresults.h"
|
|
||||||
#include "qtweetentityurl.h"
|
|
||||||
#include "qtweetentityhashtag.h"
|
|
||||||
#include "qtweetentityusermentions.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts list of statuses
|
|
||||||
*/
|
|
||||||
QList<QTweetStatus> QTweetConvert::variantToStatusList(const QVariant &fromParser)
|
|
||||||
{
|
|
||||||
QList<QTweetStatus> statuses;
|
|
||||||
|
|
||||||
QList<QVariant> listStatus = fromParser.toList();
|
|
||||||
|
|
||||||
foreach (const QVariant& status, listStatus) {
|
|
||||||
QVariantMap statusMap = status.toMap();
|
|
||||||
|
|
||||||
QTweetStatus tweetStatus = variantMapToStatus(statusMap);
|
|
||||||
|
|
||||||
statuses.append(tweetStatus);
|
|
||||||
}
|
|
||||||
return statuses;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts status
|
|
||||||
*/
|
|
||||||
QTweetStatus QTweetConvert::variantMapToStatus(const QVariantMap &var)
|
|
||||||
{
|
|
||||||
QTweetStatus status;
|
|
||||||
|
|
||||||
status.setCreatedAt(var["created_at"].toString());
|
|
||||||
status.setText(var["text"].toString());
|
|
||||||
status.setId(var["id"].toLongLong());
|
|
||||||
status.setInReplyToUserId(var["in_reply_to_user_id"].toLongLong());
|
|
||||||
status.setInReplyToScreenName(var["in_reply_to_screen_name"].toString());
|
|
||||||
status.setFavorited(var["favorited"].toBool());
|
|
||||||
|
|
||||||
QVariantMap userMap = var["user"].toMap();
|
|
||||||
QTweetUser user = variantMapToUserInfo(userMap);
|
|
||||||
|
|
||||||
status.setUser(user);
|
|
||||||
status.setSource(var["source"].toString());
|
|
||||||
status.setInReplyToStatusId(var["in_reply_to_status_id"].toLongLong());
|
|
||||||
|
|
||||||
//check if contains native retweet
|
|
||||||
if (var.contains("retweeted_status")) {
|
|
||||||
QVariantMap retweetMap = var["retweeted_status"].toMap();
|
|
||||||
|
|
||||||
QTweetStatus rtStatus = variantMapToStatus(retweetMap);
|
|
||||||
|
|
||||||
status.setRetweetedStatus(rtStatus);
|
|
||||||
}
|
|
||||||
|
|
||||||
//parse place id if it's not null
|
|
||||||
QVariant placeVar = var["place"];
|
|
||||||
if (!placeVar.isNull()) {
|
|
||||||
QTweetPlace place = variantMapToPlace(placeVar.toMap());
|
|
||||||
status.setPlace(place);
|
|
||||||
}
|
|
||||||
|
|
||||||
//check if contains entities
|
|
||||||
if (var.contains("entities")) {
|
|
||||||
QVariantMap entitiesVarMap = var["entities"].toMap();
|
|
||||||
|
|
||||||
//url entities
|
|
||||||
QVariantList urlEntitiesVarList = entitiesVarMap["urls"].toList();
|
|
||||||
|
|
||||||
foreach (const QVariant& urlEntityVar, urlEntitiesVarList) {
|
|
||||||
QVariantMap urlEntityVarMap = urlEntityVar.toMap();
|
|
||||||
QTweetEntityUrl urlEntity = variantMapToEntityUrl(urlEntityVarMap);
|
|
||||||
|
|
||||||
status.addUrlEntity(urlEntity);
|
|
||||||
}
|
|
||||||
|
|
||||||
//hashtag entities
|
|
||||||
QVariantList hashtagEntitiesVarList = entitiesVarMap["hashtags"].toList();
|
|
||||||
|
|
||||||
foreach (const QVariant& hashtagEntityVar, hashtagEntitiesVarList) {
|
|
||||||
QVariantMap hashtagEntityVarMap = hashtagEntityVar.toMap();
|
|
||||||
QTweetEntityHashtag hashtagEntity = variantMapToEntityHashtag(hashtagEntityVarMap);
|
|
||||||
|
|
||||||
status.addHashtagEntity(hashtagEntity);
|
|
||||||
}
|
|
||||||
|
|
||||||
//user mentions
|
|
||||||
QVariantList userMentionsEntitiesVarList = entitiesVarMap["user_mentions"].toList();
|
|
||||||
|
|
||||||
foreach (const QVariant& userMentionsEntityVar, userMentionsEntitiesVarList) {
|
|
||||||
QVariantMap userMentionsEntityVarMap = userMentionsEntityVar.toMap();
|
|
||||||
QTweetEntityUserMentions userMentionsEntity = variantMapToEntityUserMentions(userMentionsEntityVarMap);
|
|
||||||
|
|
||||||
status.addUserMentionsEntity(userMentionsEntity);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts user info
|
|
||||||
*/
|
|
||||||
QTweetUser QTweetConvert::variantMapToUserInfo(const QVariantMap &var)
|
|
||||||
{
|
|
||||||
QTweetUser userInfo;
|
|
||||||
|
|
||||||
userInfo.setId(var["id"].toLongLong());
|
|
||||||
|
|
||||||
//don't fill rest of it, when user info is trimmed
|
|
||||||
if (var.contains("name")) {
|
|
||||||
|
|
||||||
userInfo.setName(var["name"].toString());
|
|
||||||
userInfo.setLocation(var["location"].toString());
|
|
||||||
userInfo.setprofileImageUrl(var["profile_image_url"].toString());
|
|
||||||
userInfo.setCreatedAt(var["created_at"].toString());
|
|
||||||
userInfo.setFavouritesCount(var["favourites_count"].toInt());
|
|
||||||
userInfo.setUrl(var["url"].toString());
|
|
||||||
userInfo.setUtcOffset(var["utc_offset"].toInt());
|
|
||||||
userInfo.setProtected(var["protected"].toBool());
|
|
||||||
userInfo.setFollowersCount(var["followers_count"].toInt());
|
|
||||||
userInfo.setVerified(var["verified"].toBool());
|
|
||||||
userInfo.setGeoEnabled(var["geo_enabled"].toBool());
|
|
||||||
userInfo.setDescription(var["description"].toString());
|
|
||||||
userInfo.setTimezone(var["time_zone"].toString());
|
|
||||||
userInfo.setFriendsCount(var["friends_count"].toInt());
|
|
||||||
userInfo.setStatusesCount(var["statuses_count"].toInt());
|
|
||||||
userInfo.setScreenName(var["screen_name"].toString());
|
|
||||||
userInfo.setContributorsEnabled(var["contributors_enabled"].toBool());
|
|
||||||
userInfo.setListedCount(var["listed_count"].toInt());
|
|
||||||
userInfo.setLang(var["lang"].toString());
|
|
||||||
|
|
||||||
//check if contains status
|
|
||||||
if (var.contains("status")) {
|
|
||||||
QVariantMap statusMap = var["status"].toMap();
|
|
||||||
|
|
||||||
QTweetStatus status = variantMapToStatus(statusMap);
|
|
||||||
|
|
||||||
userInfo.setStatus(status);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return userInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts list of direct messages
|
|
||||||
*/
|
|
||||||
QList<QTweetDMStatus> QTweetConvert::variantToDirectMessagesList(const QVariant& fromParser)
|
|
||||||
{
|
|
||||||
QList<QTweetDMStatus> directMessages;
|
|
||||||
|
|
||||||
QList<QVariant> listMessages = fromParser.toList();
|
|
||||||
|
|
||||||
foreach (const QVariant& message, listMessages) {
|
|
||||||
QTweetDMStatus dmStatus = variantMapToDirectMessage(message.toMap());
|
|
||||||
directMessages.append(dmStatus);
|
|
||||||
}
|
|
||||||
|
|
||||||
return directMessages;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts direct message
|
|
||||||
*/
|
|
||||||
QTweetDMStatus QTweetConvert::variantMapToDirectMessage(const QVariantMap& var)
|
|
||||||
{
|
|
||||||
QTweetDMStatus directMessage;
|
|
||||||
|
|
||||||
directMessage.setCreatedAt(var["created_at"].toString());
|
|
||||||
directMessage.setSenderScreenName(var["sender_screen_name"].toString());
|
|
||||||
|
|
||||||
QVariantMap senderMap = var["sender"].toMap();
|
|
||||||
QTweetUser sender = variantMapToUserInfo(senderMap);
|
|
||||||
|
|
||||||
directMessage.setSender(sender);
|
|
||||||
|
|
||||||
directMessage.setText(var["text"].toString());
|
|
||||||
directMessage.setRecipientScreenName(var["recipient_screen_name"].toString());
|
|
||||||
directMessage.setId(var["id"].toLongLong());
|
|
||||||
|
|
||||||
QVariantMap recipientMap = var["recipient"].toMap();
|
|
||||||
QTweetUser recipient = variantMapToUserInfo(recipientMap);
|
|
||||||
|
|
||||||
directMessage.setRecipient(recipient);
|
|
||||||
|
|
||||||
directMessage.setRecipientId(var["recipient_id"].toLongLong());
|
|
||||||
directMessage.setSenderId(var["sender_id"].toLongLong());
|
|
||||||
|
|
||||||
return directMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts tweet list
|
|
||||||
*/
|
|
||||||
QTweetList QTweetConvert::variantMapToTweetList(const QVariantMap& var)
|
|
||||||
{
|
|
||||||
QTweetList list;
|
|
||||||
|
|
||||||
list.setMode(var["mode"].toString());
|
|
||||||
list.setDescription(var["description"].toString());
|
|
||||||
list.setFollowing(var["following"].toBool());
|
|
||||||
list.setMemberCount(var["member_count"].toInt());
|
|
||||||
list.setFullName(var["full_name"].toString());
|
|
||||||
list.setSubscriberCount(var["subscriber_count"].toInt());
|
|
||||||
list.setSlug(var["slug"].toString());
|
|
||||||
list.setName(var["name"].toString());
|
|
||||||
list.setId(var["id"].toLongLong());
|
|
||||||
list.setUri(var["uri"].toString());
|
|
||||||
|
|
||||||
if (var.contains("user")) {
|
|
||||||
QVariantMap userMap = var["user"].toMap();
|
|
||||||
|
|
||||||
QTweetUser user = variantMapToUserInfo(userMap);
|
|
||||||
|
|
||||||
list.setUser(user);
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts list of user infos
|
|
||||||
*/
|
|
||||||
QList<QTweetUser> QTweetConvert::variantToUserInfoList(const QVariant& fromParser)
|
|
||||||
{
|
|
||||||
QList<QTweetUser> users;
|
|
||||||
|
|
||||||
QList<QVariant> listUsers = fromParser.toList();
|
|
||||||
|
|
||||||
foreach (const QVariant& user, listUsers) {
|
|
||||||
QTweetUser userInfo = variantMapToUserInfo(user.toMap());
|
|
||||||
|
|
||||||
users.append(userInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
return users;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts list of tweet lists
|
|
||||||
*/
|
|
||||||
QList<QTweetList> QTweetConvert::variantToTweetLists(const QVariant& var)
|
|
||||||
{
|
|
||||||
QList<QTweetList> lists;
|
|
||||||
|
|
||||||
QList<QVariant> varLists = var.toList();
|
|
||||||
|
|
||||||
foreach (const QVariant& varlist, varLists) {
|
|
||||||
QTweetList tweetlist = variantMapToTweetList(varlist.toMap());
|
|
||||||
|
|
||||||
lists.append(tweetlist);
|
|
||||||
}
|
|
||||||
|
|
||||||
return lists;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts search result
|
|
||||||
*/
|
|
||||||
QTweetSearchResult QTweetConvert::variantMapToSearchResult(const QVariantMap& var)
|
|
||||||
{
|
|
||||||
QTweetSearchResult result;
|
|
||||||
|
|
||||||
result.setCreatedAt(var["created_at"].toString());
|
|
||||||
result.setFromUser(var["from_user"].toString());
|
|
||||||
result.setId(var["id"].toLongLong());
|
|
||||||
result.setLang(var["iso_language_code"].toString());
|
|
||||||
result.setProfileImageUrl(var["profile_image_url"].toString());
|
|
||||||
result.setSource(var["source"].toString());
|
|
||||||
result.setText(var["text"].toString());
|
|
||||||
result.setToUser(var["to_user"].toString());
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts page results
|
|
||||||
*/
|
|
||||||
QTweetSearchPageResults QTweetConvert::variantToSearchPageResults(const QVariant& var)
|
|
||||||
{
|
|
||||||
QTweetSearchPageResults page;
|
|
||||||
|
|
||||||
QVariantMap varMap = var.toMap();
|
|
||||||
|
|
||||||
page.setMaxId(varMap["max_id"].toLongLong());
|
|
||||||
page.setNextPage(varMap["next_page"].toByteArray());
|
|
||||||
page.setPage(varMap["page"].toInt());
|
|
||||||
page.setQuery(varMap["query"].toByteArray());
|
|
||||||
page.setRefreshUrl(varMap["refresh_url"].toByteArray());
|
|
||||||
page.setResultsPerPage(varMap["results_per_page"].toInt());
|
|
||||||
page.setSinceId(varMap["since_id"].toLongLong());
|
|
||||||
page.setTotal(varMap["total"].toInt());
|
|
||||||
|
|
||||||
QList<QTweetSearchResult> resultList;
|
|
||||||
QList<QVariant> resultVarList = varMap["results"].toList();
|
|
||||||
|
|
||||||
foreach (const QVariant& resultVar, resultVarList) {
|
|
||||||
QTweetSearchResult result = variantMapToSearchResult(resultVar.toMap());
|
|
||||||
resultList.append(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
page.setResults(resultList);
|
|
||||||
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts place
|
|
||||||
*/
|
|
||||||
QTweetPlace QTweetConvert::variantMapToPlace(const QVariantMap& var)
|
|
||||||
{
|
|
||||||
QTweetPlace place;
|
|
||||||
|
|
||||||
place.setName(var["name"].toString());
|
|
||||||
place.setCountryCode(var["country_code"].toString());
|
|
||||||
place.setCountry(var["country"].toString());
|
|
||||||
place.setID(var["id"].toString());
|
|
||||||
place.setFullName(var["full_name"].toString());
|
|
||||||
|
|
||||||
QString placeType = var["place_type"].toString();
|
|
||||||
|
|
||||||
if (placeType == "poi")
|
|
||||||
place.setType(QTweetPlace::Poi);
|
|
||||||
else if (placeType == "neighborhood")
|
|
||||||
place.setType(QTweetPlace::Neighborhood);
|
|
||||||
else if (placeType == "city")
|
|
||||||
place.setType(QTweetPlace::City);
|
|
||||||
else if (placeType == "admin")
|
|
||||||
place.setType(QTweetPlace::Admin);
|
|
||||||
else if (placeType == "country")
|
|
||||||
place.setType(QTweetPlace::Country);
|
|
||||||
else
|
|
||||||
place.setType(QTweetPlace::Neighborhood); //twitter default
|
|
||||||
|
|
||||||
QVariant bbVar = var["bounding_box"];
|
|
||||||
|
|
||||||
if (!bbVar.isNull()) {
|
|
||||||
QVariantMap bbMap = bbVar.toMap();
|
|
||||||
|
|
||||||
if (bbMap["type"].toString() == "Polygon") {
|
|
||||||
QVariantList coordList = bbMap["coordinates"].toList();
|
|
||||||
|
|
||||||
if (coordList.count() == 1) {
|
|
||||||
QVariantList latLongList = coordList.at(0).toList();
|
|
||||||
|
|
||||||
if (latLongList.count() == 4) {
|
|
||||||
QTweetGeoBoundingBox box;
|
|
||||||
|
|
||||||
QVariantList coordsBottomLeft = latLongList.at(0).toList();
|
|
||||||
box.setBottomLeft(QTweetGeoCoord(coordsBottomLeft.at(1).toDouble(), coordsBottomLeft.at(0).toDouble()));
|
|
||||||
|
|
||||||
QVariantList coordsBottomRight = latLongList.at(1).toList();
|
|
||||||
box.setBottomRight(QTweetGeoCoord(coordsBottomRight.at(1).toDouble(), coordsBottomRight.at(0).toDouble()));
|
|
||||||
|
|
||||||
QVariantList coordsTopRight = latLongList.at(2).toList();
|
|
||||||
box.setTopRight(QTweetGeoCoord(coordsTopRight.at(1).toDouble(), coordsTopRight.at(0).toDouble()));
|
|
||||||
|
|
||||||
QVariantList coordsTopLeft = latLongList.at(3).toList();
|
|
||||||
box.setTopLeft(QTweetGeoCoord(coordsTopLeft.at(1).toDouble(), coordsTopLeft.at(0).toDouble()));
|
|
||||||
|
|
||||||
place.setBoundingBox(box);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return place;
|
|
||||||
}
|
|
||||||
|
|
||||||
//not to be used in timelines api, but in geo api, where place contains other places
|
|
||||||
//is it recursive responsive?
|
|
||||||
QTweetPlace QTweetConvert::variantMapToPlaceRecursive(const QVariantMap& var)
|
|
||||||
{
|
|
||||||
QTweetPlace place;
|
|
||||||
|
|
||||||
place.setName(var["name"].toString());
|
|
||||||
place.setCountryCode(var["country_code"].toString());
|
|
||||||
place.setCountry(var["country"].toString());
|
|
||||||
place.setID(var["id"].toString());
|
|
||||||
place.setFullName(var["full_name"].toString());
|
|
||||||
|
|
||||||
QString placeType = var["place_type"].toString();
|
|
||||||
|
|
||||||
if (placeType == "poi")
|
|
||||||
place.setType(QTweetPlace::Poi);
|
|
||||||
else if (placeType == "neighborhood")
|
|
||||||
place.setType(QTweetPlace::Neighborhood);
|
|
||||||
else if (placeType == "city")
|
|
||||||
place.setType(QTweetPlace::City);
|
|
||||||
else if (placeType == "admin")
|
|
||||||
place.setType(QTweetPlace::Admin);
|
|
||||||
else if (placeType == "country")
|
|
||||||
place.setType(QTweetPlace::Country);
|
|
||||||
else
|
|
||||||
place.setType(QTweetPlace::Neighborhood); //twitter default
|
|
||||||
|
|
||||||
QVariant bbVar = var["bounding_box"];
|
|
||||||
|
|
||||||
if (!bbVar.isNull()) {
|
|
||||||
QVariantMap bbMap = bbVar.toMap();
|
|
||||||
|
|
||||||
if (bbMap["type"].toString() == "Polygon") {
|
|
||||||
QVariantList coordList = bbMap["coordinates"].toList();
|
|
||||||
|
|
||||||
if (coordList.count() == 1) {
|
|
||||||
QVariantList latLongList = coordList.at(0).toList();
|
|
||||||
|
|
||||||
if (latLongList.count() == 4) {
|
|
||||||
QTweetGeoBoundingBox box;
|
|
||||||
|
|
||||||
QVariantList coordsBottomLeft = latLongList.at(0).toList();
|
|
||||||
box.setBottomLeft(QTweetGeoCoord(coordsBottomLeft.at(1).toDouble(), coordsBottomLeft.at(0).toDouble()));
|
|
||||||
|
|
||||||
QVariantList coordsBottomRight = latLongList.at(1).toList();
|
|
||||||
box.setBottomRight(QTweetGeoCoord(coordsBottomRight.at(1).toDouble(), coordsBottomRight.at(0).toDouble()));
|
|
||||||
|
|
||||||
QVariantList coordsTopRight = latLongList.at(2).toList();
|
|
||||||
box.setTopRight(QTweetGeoCoord(coordsTopRight.at(1).toDouble(), coordsTopRight.at(0).toDouble()));
|
|
||||||
|
|
||||||
QVariantList coordsTopLeft = latLongList.at(3).toList();
|
|
||||||
box.setTopLeft(QTweetGeoCoord(coordsTopLeft.at(1).toDouble(), coordsTopLeft.at(0).toDouble()));
|
|
||||||
|
|
||||||
place.setBoundingBox(box);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QVariantList containedVarList = var["contained_within"].toList();
|
|
||||||
|
|
||||||
QList<QTweetPlace> containedInPlacesList;
|
|
||||||
|
|
||||||
if (!containedVarList.isEmpty()) {
|
|
||||||
foreach (const QVariant& containedVar, containedVarList) {
|
|
||||||
QVariantMap containedPlaceMap = containedVar.toMap();
|
|
||||||
|
|
||||||
QTweetPlace containedPlace = variantMapToPlaceRecursive(containedPlaceMap);
|
|
||||||
|
|
||||||
containedInPlacesList.append(containedPlace);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
place.setContainedWithin(containedInPlacesList);
|
|
||||||
|
|
||||||
return place;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convers list of places
|
|
||||||
*/
|
|
||||||
QList<QTweetPlace> QTweetConvert::variantToPlaceList(const QVariant& fromParser)
|
|
||||||
{
|
|
||||||
QList<QTweetPlace> placeList;
|
|
||||||
|
|
||||||
QVariantMap responseVarMap = fromParser.toMap();
|
|
||||||
QVariantMap resultVarMap = responseVarMap["result"].toMap();
|
|
||||||
QVariantList placesVarList = resultVarMap["places"].toList();
|
|
||||||
|
|
||||||
foreach (const QVariant& placeVar, placesVarList) {
|
|
||||||
QTweetPlace place = variantMapToPlaceRecursive(placeVar.toMap());
|
|
||||||
placeList.append(place);
|
|
||||||
}
|
|
||||||
|
|
||||||
return placeList;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityUrl QTweetConvert::variantMapToEntityUrl(const QVariantMap &var)
|
|
||||||
{
|
|
||||||
QString url = var["url"].toString();
|
|
||||||
QString displayUrl = var["display_url"].toString();
|
|
||||||
QString expandedUrl = var["expanded_url"].toString();
|
|
||||||
|
|
||||||
QTweetEntityUrl urlEntity;
|
|
||||||
urlEntity.setUrl(url);
|
|
||||||
urlEntity.setDisplayUrl(displayUrl);
|
|
||||||
urlEntity.setExpandedUrl(expandedUrl);
|
|
||||||
|
|
||||||
return urlEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityHashtag QTweetConvert::variantMapToEntityHashtag(const QVariantMap &var)
|
|
||||||
{
|
|
||||||
QTweetEntityHashtag hashtagEntity;
|
|
||||||
hashtagEntity.setText(var["text"].toString());
|
|
||||||
|
|
||||||
return hashtagEntity;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityUserMentions QTweetConvert::variantMapToEntityUserMentions(const QVariantMap &var)
|
|
||||||
{
|
|
||||||
QTweetEntityUserMentions userMentionsEntity;
|
|
||||||
userMentionsEntity.setScreenName(var["screen_name"].toString());
|
|
||||||
userMentionsEntity.setName(var["name"].toString());
|
|
||||||
userMentionsEntity.setUserid(var["id"].toLongLong());
|
|
||||||
|
|
||||||
return userMentionsEntity;
|
|
||||||
}
|
|
@@ -1,63 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETCONVERT_H
|
|
||||||
#define QTWEETCONVERT_H
|
|
||||||
|
|
||||||
#include <QVariant>
|
|
||||||
|
|
||||||
class QTweetStatus;
|
|
||||||
class QTweetUser;
|
|
||||||
class QTweetDMStatus;
|
|
||||||
class QTweetList;
|
|
||||||
class QTweetSearchResult;
|
|
||||||
class QTweetSearchPageResults;
|
|
||||||
class QTweetPlace;
|
|
||||||
class QTweetEntityUrl;
|
|
||||||
class QTweetEntityHashtag;
|
|
||||||
class QTweetEntityUserMentions;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains static converting functions
|
|
||||||
*/
|
|
||||||
class QTweetConvert
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
static QList<QTweetStatus> variantToStatusList(const QVariant& fromParser);
|
|
||||||
static QTweetStatus variantMapToStatus(const QVariantMap& var);
|
|
||||||
static QTweetUser variantMapToUserInfo(const QVariantMap& var);
|
|
||||||
static QList<QTweetDMStatus> variantToDirectMessagesList(const QVariant& fromParser);
|
|
||||||
static QTweetDMStatus variantMapToDirectMessage(const QVariantMap& var);
|
|
||||||
static QTweetList variantMapToTweetList(const QVariantMap& var);
|
|
||||||
static QList<QTweetUser> variantToUserInfoList(const QVariant& fromParser);
|
|
||||||
static QList<QTweetList> variantToTweetLists(const QVariant& var);
|
|
||||||
static QTweetSearchResult variantMapToSearchResult(const QVariantMap& var);
|
|
||||||
static QTweetSearchPageResults variantToSearchPageResults(const QVariant& var);
|
|
||||||
static QTweetPlace variantMapToPlace(const QVariantMap& var);
|
|
||||||
static QTweetPlace variantMapToPlaceRecursive(const QVariantMap& var);
|
|
||||||
static QList<QTweetPlace> variantToPlaceList(const QVariant& fromParser);
|
|
||||||
static QTweetEntityUrl variantMapToEntityUrl(const QVariantMap& var);
|
|
||||||
static QTweetEntityHashtag variantMapToEntityHashtag(const QVariantMap& var);
|
|
||||||
static QTweetEntityUserMentions variantMapToEntityUserMentions(const QVariantMap& var);
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETCONVERT_H
|
|
@@ -1,83 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include "qtweetdirectmessagedestroy.h"
|
|
||||||
#include "qtweetdmstatus.h"
|
|
||||||
#include "qtweetconvert.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
QTweetDirectMessageDestroy::QTweetDirectMessageDestroy(QObject *parent) :
|
|
||||||
QTweetNetBase(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param oauthTwitter OAuthTwitter object
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
QTweetDirectMessageDestroy::QTweetDirectMessageDestroy(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QTweetNetBase(oauthTwitter, parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param id the ID of the direct message to delete.
|
|
||||||
* @param includeEntities When set to true, each tweet will include a node called "entities,"
|
|
||||||
*/
|
|
||||||
void QTweetDirectMessageDestroy::destroyMessage(qint64 id, bool includeEntities)
|
|
||||||
{
|
|
||||||
if (!isAuthenticationEnabled()) {
|
|
||||||
qCritical("Needs authentication to be enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl url(QString("http://api.twitter.com/1/direct_messages/destroy/%1.json").arg(id));
|
|
||||||
|
|
||||||
if (includeEntities)
|
|
||||||
url.addQueryItem("include_entities", "true");
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::DELETE);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->deleteResource(req);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDirectMessageDestroy::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
|
|
||||||
{
|
|
||||||
if (ok) {
|
|
||||||
QTweetDMStatus dm = QTweetConvert::variantMapToDirectMessage(json.toMap());
|
|
||||||
|
|
||||||
emit parsedDirectMessage(dm);
|
|
||||||
} else {
|
|
||||||
qDebug() << "QTweetDirectMessageDestroy parser error: " << errorMsg;
|
|
||||||
setLastErrorMessage(errorMsg);
|
|
||||||
emit error(JsonParsingError, errorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@@ -1,46 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETDIRECTMESSAGEDESTROY_H
|
|
||||||
#define QTWEETDIRECTMESSAGEDESTROY_H
|
|
||||||
|
|
||||||
#include "qtweetnetbase.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroys the direct message.
|
|
||||||
* The authenticating user must be the recipient of the specified direct message.
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT QTweetDirectMessageDestroy : public QTweetNetBase
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QTweetDirectMessageDestroy(QObject *parent = 0);
|
|
||||||
QTweetDirectMessageDestroy(OAuthTwitter *oauthTwitter, QObject *parent = 0);
|
|
||||||
void destroyMessage(qint64 id, bool includeEntities = false);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
/** emits destroyed direct message */
|
|
||||||
void parsedDirectMessage(const QTweetDMStatus& message);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETDIRECTMESSAGEDESTROY_H
|
|
@@ -1,129 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include "qtweetdirectmessagenew.h"
|
|
||||||
#include "qtweetdmstatus.h"
|
|
||||||
#include "qtweetconvert.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
QTweetDirectMessageNew::QTweetDirectMessageNew(QObject *parent) :
|
|
||||||
QTweetNetBase(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param oauthTwitter OAuthTwitter object
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
QTweetDirectMessageNew::QTweetDirectMessageNew(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QTweetNetBase(oauthTwitter, parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends direct message
|
|
||||||
* @param user The ID of the user who should receive the direct message.
|
|
||||||
* @param text The text of direct message
|
|
||||||
* @param includeEntities When set to true each tweet will include a node called "entities,"
|
|
||||||
*/
|
|
||||||
void QTweetDirectMessageNew::post(qint64 user,
|
|
||||||
const QString &text,
|
|
||||||
bool includeEntities)
|
|
||||||
{
|
|
||||||
if (!isAuthenticationEnabled()) {
|
|
||||||
qCritical("Needs authentication to be enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl url("http://api.twitter.com/1/direct_messages/new.json");
|
|
||||||
|
|
||||||
QUrl urlQuery(url);
|
|
||||||
|
|
||||||
urlQuery.addQueryItem("user_id", QString::number(user));
|
|
||||||
urlQuery.addEncodedQueryItem("text", QUrl::toPercentEncoding(text));
|
|
||||||
|
|
||||||
if (includeEntities)
|
|
||||||
urlQuery.addQueryItem("include_entities", "true");
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(urlQuery, OAuth::POST);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QByteArray postBody = urlQuery.toEncoded(QUrl::RemoveScheme | QUrl::RemoveAuthority | QUrl::RemovePath);
|
|
||||||
postBody.remove(0, 1);
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->post(req, postBody);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends direct message
|
|
||||||
* @param user The ID of the user who should receive the direct message.
|
|
||||||
* @param text The text of direct message
|
|
||||||
* @param includeEntities When set to true each tweet will include a node called "entities,"
|
|
||||||
*/
|
|
||||||
void QTweetDirectMessageNew::post(const QString &screenName, const QString &text, bool includeEntities)
|
|
||||||
{
|
|
||||||
if (!isAuthenticationEnabled()) {
|
|
||||||
qCritical("Needs authentication to be enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl url("http://api.twitter.com/1/direct_messages/new.json");
|
|
||||||
|
|
||||||
QUrl urlQuery(url);
|
|
||||||
|
|
||||||
urlQuery.addEncodedQueryItem("screen_name", QUrl::toPercentEncoding(screenName));
|
|
||||||
urlQuery.addEncodedQueryItem("text", QUrl::toPercentEncoding(text));
|
|
||||||
|
|
||||||
if (includeEntities)
|
|
||||||
urlQuery.addQueryItem("include_entities", "true");
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(urlQuery, OAuth::POST);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QByteArray postBody = urlQuery.toEncoded(QUrl::RemoveScheme | QUrl::RemoveAuthority | QUrl::RemovePath);
|
|
||||||
postBody.remove(0, 1);
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->post(req, postBody);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDirectMessageNew::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
|
|
||||||
{
|
|
||||||
if (ok) {
|
|
||||||
QTweetDMStatus dm = QTweetConvert::variantMapToDirectMessage(json.toMap());
|
|
||||||
|
|
||||||
emit parsedDirectMessage(dm);
|
|
||||||
} else {
|
|
||||||
qDebug() << "QTweetDirectMessageNew parser error: " << errorMsg;
|
|
||||||
setLastErrorMessage(errorMsg);
|
|
||||||
emit error(JsonParsingError, errorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,50 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETDIRECTMESSAGENEW_H
|
|
||||||
#define QTWEETDIRECTMESSAGENEW_H
|
|
||||||
|
|
||||||
#include "qtweetnetbase.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends a new direct message to the specified user from the authenticating user.
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT QTweetDirectMessageNew : public QTweetNetBase
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QTweetDirectMessageNew(QObject *parent = 0);
|
|
||||||
QTweetDirectMessageNew(OAuthTwitter *oauhtTwitter, QObject *parent = 0);
|
|
||||||
void post(qint64 user,
|
|
||||||
const QString& text,
|
|
||||||
bool includeEntities = false);
|
|
||||||
void post(const QString& screenName,
|
|
||||||
const QString& text,
|
|
||||||
bool includeEntities = false);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
/** Emits direct message who was sent */
|
|
||||||
void parsedDirectMessage(const QTweetDMStatus& message);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETDIRECTMESSAGENEW_H
|
|
@@ -1,103 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include "qtweetdirectmessages.h"
|
|
||||||
#include "qtweetdmstatus.h"
|
|
||||||
#include "qtweetconvert.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
QTweetDirectMessages::QTweetDirectMessages(QObject *parent) :
|
|
||||||
QTweetNetBase(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param oauthTwitter OAuthTwitter object
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
QTweetDirectMessages::QTweetDirectMessages(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QTweetNetBase(oauthTwitter, parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Start fetching direct messages
|
|
||||||
* @param sinceid Fetch DM newer then sinceid
|
|
||||||
* @param maxid Fetch DM older then maxid
|
|
||||||
* @param count Number of DM to fetch (up to 200)
|
|
||||||
* @param page Page number
|
|
||||||
* @param includeEntities When true each tweet will include a node called "entities"
|
|
||||||
* @remarks Setting parameter to default value will not be put in query
|
|
||||||
*/
|
|
||||||
void QTweetDirectMessages::fetch(qint64 sinceid,
|
|
||||||
qint64 maxid,
|
|
||||||
int count,
|
|
||||||
int page,
|
|
||||||
bool includeEntities)
|
|
||||||
{
|
|
||||||
if (!isAuthenticationEnabled()) {
|
|
||||||
qCritical("Needs authentication to be enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl url("http://api.twitter.com/1/direct_messages.json");
|
|
||||||
|
|
||||||
if (sinceid != 0)
|
|
||||||
url.addQueryItem("since_id", QString::number(sinceid));
|
|
||||||
|
|
||||||
if (maxid != 0)
|
|
||||||
url.addQueryItem("max_id", QString::number(maxid));
|
|
||||||
|
|
||||||
if (count != 0)
|
|
||||||
url.addQueryItem("count", QString::number(count));
|
|
||||||
|
|
||||||
if (page != 0)
|
|
||||||
url.addQueryItem("page", QString::number(page));
|
|
||||||
|
|
||||||
if (includeEntities)
|
|
||||||
url.addQueryItem("include_entities", "true");
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::GET);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->get(req);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDirectMessages::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
|
|
||||||
{
|
|
||||||
if (ok) {
|
|
||||||
QList<QTweetDMStatus> directMessages = QTweetConvert::variantToDirectMessagesList(json);
|
|
||||||
|
|
||||||
emit parsedDirectMessages(directMessages);
|
|
||||||
} else {
|
|
||||||
qDebug() << "QTweetDirectMessages JSON parser error: " << errorMsg;
|
|
||||||
setLastErrorMessage(errorMsg);
|
|
||||||
emit error(JsonParsingError, errorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,51 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETDIRECTMESSAGES_H
|
|
||||||
#define QTWEETDIRECTMESSAGES_H
|
|
||||||
|
|
||||||
#include "qtweetnetbase.h"
|
|
||||||
|
|
||||||
class QTweetDMStatus;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Class for fetching direct messages
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT QTweetDirectMessages : public QTweetNetBase
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QTweetDirectMessages(QObject *parent = 0);
|
|
||||||
QTweetDirectMessages(OAuthTwitter* oauthTwitter, QObject *parent = 0);
|
|
||||||
void fetch(qint64 sinceid = 0,
|
|
||||||
qint64 maxid = 0,
|
|
||||||
int count = 0,
|
|
||||||
int page = 0,
|
|
||||||
bool includeEntities = false);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
/** Emits parsed direct messages list */
|
|
||||||
void parsedDirectMessages(const QList<QTweetDMStatus>& messages);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETDIRECTMESSAGES_H
|
|
@@ -1,104 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include "qtweetdirectmessagessent.h"
|
|
||||||
#include "qtweetdmstatus.h"
|
|
||||||
#include "qtweetconvert.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
QTweetDirectMessagesSent::QTweetDirectMessagesSent(QObject *parent) :
|
|
||||||
QTweetNetBase(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param oauthTwitter OAuthTwitter object
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
QTweetDirectMessagesSent::QTweetDirectMessagesSent(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QTweetNetBase(oauthTwitter, parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts fetching direct messages
|
|
||||||
* @param sinceid returns results with an ID greater than (that is, more recent than) the specified ID.
|
|
||||||
* @param maxid returns results with an ID less than (that is, older than) or equal to the specified ID.
|
|
||||||
* @param count specifies the number of records to retrieve. Must be less than or equal to 200.
|
|
||||||
* @param page specifies the page of results to retrieve.
|
|
||||||
* @param includeEntities When set to true, each tweet will include a node called "entities,".
|
|
||||||
* @remarks Setting parameters to default value will not be put in the query
|
|
||||||
*/
|
|
||||||
void QTweetDirectMessagesSent::fetch(qint64 sinceid,
|
|
||||||
qint64 maxid,
|
|
||||||
int count,
|
|
||||||
int page,
|
|
||||||
bool includeEntities)
|
|
||||||
{
|
|
||||||
if (!isAuthenticationEnabled()) {
|
|
||||||
qCritical("Needs authentication to be enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl url("http://api.twitter.com/1/direct_messages/sent.json");
|
|
||||||
|
|
||||||
if (sinceid)
|
|
||||||
url.addQueryItem("since_id", QString::number(sinceid));
|
|
||||||
|
|
||||||
if (maxid)
|
|
||||||
url.addQueryItem("max_id", QString::number(maxid));
|
|
||||||
|
|
||||||
if (count)
|
|
||||||
url.addQueryItem("count", QString::number(count));
|
|
||||||
|
|
||||||
if (page)
|
|
||||||
url.addQueryItem("page", QString::number(page));
|
|
||||||
|
|
||||||
if (includeEntities)
|
|
||||||
url.addQueryItem("include_entities", "true");
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::GET);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->get(req);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDirectMessagesSent::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
|
|
||||||
{
|
|
||||||
if (ok) {
|
|
||||||
QList<QTweetDMStatus> directMessages = QTweetConvert::variantToDirectMessagesList(json);
|
|
||||||
|
|
||||||
emit parsedDirectMessages(directMessages);
|
|
||||||
} else {
|
|
||||||
qDebug() << "QTweetDirectMessagesSent parser error: " << errorMsg;
|
|
||||||
setLastErrorMessage(errorMsg);
|
|
||||||
emit error(JsonParsingError, errorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@@ -1,49 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETDIRECTMESSAGESSENT_H
|
|
||||||
#define QTWEETDIRECTMESSAGESSENT_H
|
|
||||||
|
|
||||||
#include "qtweetnetbase.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetches direct messages sent by the authenticating user.
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT QTweetDirectMessagesSent : public QTweetNetBase
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QTweetDirectMessagesSent(QObject *parent = 0);
|
|
||||||
QTweetDirectMessagesSent(OAuthTwitter *oauthTwitter, QObject *parent = 0);
|
|
||||||
void fetch(qint64 sinceid = 0,
|
|
||||||
qint64 maxid = 0,
|
|
||||||
int count = 0,
|
|
||||||
int page = 0,
|
|
||||||
bool includeEntities = false);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
/** Emits direct messages list */
|
|
||||||
void parsedDirectMessages(const QList<QTweetDMStatus>& messages);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETDIRECTMESSAGESSENT_H
|
|
@@ -1,154 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QSharedData>
|
|
||||||
#include <QDateTime>
|
|
||||||
#include "qtweetuser.h"
|
|
||||||
#include "qtweetdmstatus.h"
|
|
||||||
|
|
||||||
class QTweetDMStatusData : public QSharedData
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
QDateTime createdAt;
|
|
||||||
QString senderScreenName;
|
|
||||||
QTweetUser sender;
|
|
||||||
QString text;
|
|
||||||
QString recipientScreenName;
|
|
||||||
qint64 id;
|
|
||||||
QTweetUser recipient;
|
|
||||||
qint64 recipientId;
|
|
||||||
qint64 senderId;
|
|
||||||
};
|
|
||||||
|
|
||||||
QTweetDMStatus::QTweetDMStatus() :
|
|
||||||
d(new QTweetDMStatusData)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetDMStatus::QTweetDMStatus(const QTweetDMStatus &other) :
|
|
||||||
d(other.d)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetDMStatus& QTweetDMStatus::operator =(const QTweetDMStatus &other)
|
|
||||||
{
|
|
||||||
if (this != &other)
|
|
||||||
d.operator =(other.d);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetDMStatus::~QTweetDMStatus()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDMStatus::setCreatedAt(const QString &twitterDate)
|
|
||||||
{
|
|
||||||
d->createdAt = QTweetUser::twitterDateToQDateTime(twitterDate);
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDMStatus::setCreatedAt(const QDateTime &datetime)
|
|
||||||
{
|
|
||||||
d->createdAt = datetime;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDateTime QTweetDMStatus::createdAt() const
|
|
||||||
{
|
|
||||||
return d->createdAt;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDMStatus::setSenderScreenName(const QString &screenName)
|
|
||||||
{
|
|
||||||
d->senderScreenName = screenName;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QTweetDMStatus::senderScreenName() const
|
|
||||||
{
|
|
||||||
return d->senderScreenName;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDMStatus::setSender(const QTweetUser &sender)
|
|
||||||
{
|
|
||||||
d->sender = sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetUser QTweetDMStatus::sender() const
|
|
||||||
{
|
|
||||||
return d->sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDMStatus::setText(const QString &text)
|
|
||||||
{
|
|
||||||
d->text = text;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QTweetDMStatus::text() const
|
|
||||||
{
|
|
||||||
return d->text;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDMStatus::setRecipientScreenName(const QString &screenName)
|
|
||||||
{
|
|
||||||
d->recipientScreenName = screenName;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QTweetDMStatus::recipientScreenName() const
|
|
||||||
{
|
|
||||||
return d->recipientScreenName;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDMStatus::setId(qint64 id)
|
|
||||||
{
|
|
||||||
d->id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
qint64 QTweetDMStatus::id() const
|
|
||||||
{
|
|
||||||
return d->id;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDMStatus::setRecipient(const QTweetUser &recipient)
|
|
||||||
{
|
|
||||||
d->recipient = recipient;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetUser QTweetDMStatus::recipient() const
|
|
||||||
{
|
|
||||||
return d->recipient;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDMStatus::setRecipientId(qint64 id)
|
|
||||||
{
|
|
||||||
d->recipientId = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
qint64 QTweetDMStatus::recipientId() const
|
|
||||||
{
|
|
||||||
return d->recipientId;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetDMStatus::setSenderId(qint64 id)
|
|
||||||
{
|
|
||||||
d->senderId = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
qint64 QTweetDMStatus::senderId() const
|
|
||||||
{
|
|
||||||
return d->senderId;
|
|
||||||
}
|
|
@@ -1,68 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETDMSTATUS_H
|
|
||||||
#define QTWEETDMSTATUS_H
|
|
||||||
|
|
||||||
#include <QVariant>
|
|
||||||
#include <QSharedDataPointer>
|
|
||||||
#include "qtweetlib_global.h"
|
|
||||||
|
|
||||||
class QTweetUser;
|
|
||||||
class QTweetDMStatusData;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Stores direct message info
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT QTweetDMStatus
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
QTweetDMStatus();
|
|
||||||
QTweetDMStatus(const QTweetDMStatus& other);
|
|
||||||
QTweetDMStatus& operator=(const QTweetDMStatus& other);
|
|
||||||
~QTweetDMStatus();
|
|
||||||
|
|
||||||
void setCreatedAt(const QString& twitterDate);
|
|
||||||
void setCreatedAt(const QDateTime& datetime);
|
|
||||||
QDateTime createdAt() const;
|
|
||||||
void setSenderScreenName(const QString& screenName);
|
|
||||||
QString senderScreenName() const;
|
|
||||||
void setSender(const QTweetUser& sender);
|
|
||||||
QTweetUser sender() const;
|
|
||||||
void setText(const QString& text);
|
|
||||||
QString text() const;
|
|
||||||
void setRecipientScreenName(const QString& screenName);
|
|
||||||
QString recipientScreenName() const;
|
|
||||||
void setId(qint64 id);
|
|
||||||
qint64 id() const;
|
|
||||||
void setRecipient(const QTweetUser& recipient);
|
|
||||||
QTweetUser recipient() const;
|
|
||||||
void setRecipientId(qint64 id);
|
|
||||||
qint64 recipientId() const;
|
|
||||||
void setSenderId(qint64 id);
|
|
||||||
qint64 senderId() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
QSharedDataPointer<QTweetDMStatusData> d;
|
|
||||||
};
|
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(QTweetDMStatus)
|
|
||||||
|
|
||||||
#endif // QTWEETDMSTATUS_H
|
|
@@ -1,57 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "qtweetentityhashtag.h"
|
|
||||||
#include <QString>
|
|
||||||
#include <QSharedData>
|
|
||||||
|
|
||||||
class QTweetEntityHashtagData : public QSharedData {
|
|
||||||
public:
|
|
||||||
QString hashtag;
|
|
||||||
};
|
|
||||||
|
|
||||||
QTweetEntityHashtag::QTweetEntityHashtag() : data(new QTweetEntityHashtagData)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityHashtag::QTweetEntityHashtag(const QTweetEntityHashtag &rhs) : data(rhs.data)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityHashtag &QTweetEntityHashtag::operator=(const QTweetEntityHashtag &rhs)
|
|
||||||
{
|
|
||||||
if (this != &rhs)
|
|
||||||
data.operator=(rhs.data);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityHashtag::~QTweetEntityHashtag()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetEntityHashtag::setText(const QString &text)
|
|
||||||
{
|
|
||||||
data->hashtag = text;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QTweetEntityHashtag::text() const
|
|
||||||
{
|
|
||||||
return data->hashtag;
|
|
||||||
}
|
|
@@ -1,43 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETENTITYHASHTAG_H
|
|
||||||
#define QTWEETENTITYHASHTAG_H
|
|
||||||
|
|
||||||
#include <QSharedDataPointer>
|
|
||||||
|
|
||||||
class QTweetEntityHashtagData;
|
|
||||||
|
|
||||||
class QTweetEntityHashtag
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
QTweetEntityHashtag();
|
|
||||||
QTweetEntityHashtag(const QTweetEntityHashtag &);
|
|
||||||
QTweetEntityHashtag &operator=(const QTweetEntityHashtag &);
|
|
||||||
~QTweetEntityHashtag();
|
|
||||||
|
|
||||||
void setText(const QString& text);
|
|
||||||
QString text() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
QSharedDataPointer<QTweetEntityHashtagData> data;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETENTITYHASHTAG_H
|
|
@@ -1,82 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "qtweetentityurl.h"
|
|
||||||
#include <QString>
|
|
||||||
#include <QSharedData>
|
|
||||||
|
|
||||||
class QTweetEntityUrlData : public QSharedData {
|
|
||||||
public:
|
|
||||||
QTweetEntityUrlData() : empty(false) {}
|
|
||||||
|
|
||||||
QString displayUrl;
|
|
||||||
QString url;
|
|
||||||
QString expandedUrl;
|
|
||||||
bool empty;
|
|
||||||
};
|
|
||||||
|
|
||||||
QTweetEntityUrl::QTweetEntityUrl() : data(new QTweetEntityUrlData)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityUrl::QTweetEntityUrl(const QTweetEntityUrl &rhs) : data(rhs.data)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityUrl &QTweetEntityUrl::operator=(const QTweetEntityUrl &rhs)
|
|
||||||
{
|
|
||||||
if (this != &rhs)
|
|
||||||
data.operator=(rhs.data);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityUrl::~QTweetEntityUrl()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetEntityUrl::setDisplayUrl(const QString &url)
|
|
||||||
{
|
|
||||||
data->displayUrl = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QTweetEntityUrl::displayUrl() const
|
|
||||||
{
|
|
||||||
return data->displayUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetEntityUrl::setUrl(const QString &url)
|
|
||||||
{
|
|
||||||
data->url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QTweetEntityUrl::url() const
|
|
||||||
{
|
|
||||||
return data->url;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetEntityUrl::setExpandedUrl(const QString &url)
|
|
||||||
{
|
|
||||||
data->url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QTweetEntityUrl::expandedUrl() const
|
|
||||||
{
|
|
||||||
return data->url;
|
|
||||||
}
|
|
@@ -1,47 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETENTITYURL_H
|
|
||||||
#define QTWEETENTITYURL_H
|
|
||||||
|
|
||||||
#include <QSharedDataPointer>
|
|
||||||
|
|
||||||
class QTweetEntityUrlData;
|
|
||||||
|
|
||||||
class QTweetEntityUrl
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
QTweetEntityUrl();
|
|
||||||
QTweetEntityUrl(const QTweetEntityUrl &);
|
|
||||||
QTweetEntityUrl &operator=(const QTweetEntityUrl &);
|
|
||||||
~QTweetEntityUrl();
|
|
||||||
|
|
||||||
void setDisplayUrl(const QString& url);
|
|
||||||
QString displayUrl() const;
|
|
||||||
void setUrl(const QString& url);
|
|
||||||
QString url() const;
|
|
||||||
void setExpandedUrl(const QString& url);
|
|
||||||
QString expandedUrl() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
QSharedDataPointer<QTweetEntityUrlData> data;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETENTITYURL_H
|
|
@@ -1,81 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "qtweetentityusermentions.h"
|
|
||||||
#include <QSharedData>
|
|
||||||
#include <QString>
|
|
||||||
|
|
||||||
class QTweetEntityUserMentionsData : public QSharedData {
|
|
||||||
public:
|
|
||||||
QTweetEntityUserMentionsData() : userid(0) {}
|
|
||||||
|
|
||||||
QString screenName;
|
|
||||||
QString name;
|
|
||||||
qint64 userid;
|
|
||||||
};
|
|
||||||
|
|
||||||
QTweetEntityUserMentions::QTweetEntityUserMentions() : data(new QTweetEntityUserMentionsData)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityUserMentions::QTweetEntityUserMentions(const QTweetEntityUserMentions &rhs) : data(rhs.data)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityUserMentions &QTweetEntityUserMentions::operator=(const QTweetEntityUserMentions &rhs)
|
|
||||||
{
|
|
||||||
if (this != &rhs)
|
|
||||||
data.operator=(rhs.data);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
QTweetEntityUserMentions::~QTweetEntityUserMentions()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetEntityUserMentions::setScreenName(const QString &screenName)
|
|
||||||
{
|
|
||||||
data->screenName = screenName;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QTweetEntityUserMentions::screenName() const
|
|
||||||
{
|
|
||||||
return data->screenName;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetEntityUserMentions::setName(const QString &name)
|
|
||||||
{
|
|
||||||
data->name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QTweetEntityUserMentions::name() const
|
|
||||||
{
|
|
||||||
return data->name;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetEntityUserMentions::setUserid(qint64 id)
|
|
||||||
{
|
|
||||||
data->userid = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
qint64 QTweetEntityUserMentions::userid() const
|
|
||||||
{
|
|
||||||
return data->userid;
|
|
||||||
}
|
|
@@ -1,47 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETENTITYUSERMENTIONS_H
|
|
||||||
#define QTWEETENTITYUSERMENTIONS_H
|
|
||||||
|
|
||||||
#include <QSharedDataPointer>
|
|
||||||
|
|
||||||
class QTweetEntityUserMentionsData;
|
|
||||||
|
|
||||||
class QTweetEntityUserMentions
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
QTweetEntityUserMentions();
|
|
||||||
QTweetEntityUserMentions(const QTweetEntityUserMentions &);
|
|
||||||
QTweetEntityUserMentions &operator=(const QTweetEntityUserMentions &);
|
|
||||||
~QTweetEntityUserMentions();
|
|
||||||
|
|
||||||
void setScreenName(const QString& screenName);
|
|
||||||
QString screenName() const;
|
|
||||||
void setName(const QString& name);
|
|
||||||
QString name() const;
|
|
||||||
void setUserid(qint64 id);
|
|
||||||
qint64 userid() const;
|
|
||||||
|
|
||||||
private:
|
|
||||||
QSharedDataPointer<QTweetEntityUserMentionsData> data;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETENTITYUSERMENTIONS_H
|
|
@@ -1,93 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include "qtweetfavorites.h"
|
|
||||||
#include "qtweetstatus.h"
|
|
||||||
#include "qtweetconvert.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
QTweetFavorites::QTweetFavorites(QObject *parent) :
|
|
||||||
QTweetNetBase(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param oauthTwitter OAuthTwitter object
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
QTweetFavorites::QTweetFavorites(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QTweetNetBase(oauthTwitter, parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts fetching favorites
|
|
||||||
* @param id the ID of the user for whom to request a list of favorite statuses. 0 for authenticated user
|
|
||||||
* @param page Specifies the page of results to retrieve.
|
|
||||||
* @param includeEntities When set to true, each tweet will include a node called "entities,".
|
|
||||||
*/
|
|
||||||
void QTweetFavorites::fetch(qint64 id, int page, bool includeEntities)
|
|
||||||
{
|
|
||||||
if (!isAuthenticationEnabled()) {
|
|
||||||
qCritical("Needs authentication to be enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl url;
|
|
||||||
|
|
||||||
if (id) {
|
|
||||||
url.setUrl(QString("http://api.twitter.com/1/favorites/%1.json").arg(id));
|
|
||||||
} else {
|
|
||||||
url.setUrl("http://api.twitter.com/1/favorites.json");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (page)
|
|
||||||
url.addQueryItem("page", QString::number(page));
|
|
||||||
|
|
||||||
if (includeEntities)
|
|
||||||
url.addQueryItem("include_entities", "true");
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::GET);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->get(req);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetFavorites::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
|
|
||||||
{
|
|
||||||
if (ok) {
|
|
||||||
QList<QTweetStatus> statuses = QTweetConvert::variantToStatusList(json);
|
|
||||||
|
|
||||||
emit parsedFavorites(statuses);
|
|
||||||
} else {
|
|
||||||
qDebug() << "QTweetFavorites JSON parser error: " << errorMsg;
|
|
||||||
setLastErrorMessage(errorMsg);
|
|
||||||
emit error(JsonParsingError, errorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,48 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETFAVORITES_H
|
|
||||||
#define QTWEETFAVORITES_H
|
|
||||||
|
|
||||||
#include "qtweetnetbase.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetches favorite statuses for the authenticating user or
|
|
||||||
* user specified by the ID parameter
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT QTweetFavorites : public QTweetNetBase
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QTweetFavorites(QObject *parent = 0);
|
|
||||||
QTweetFavorites(OAuthTwitter *oauthTwitter, QObject *parent = 0);
|
|
||||||
void fetch(qint64 id = 0,
|
|
||||||
int page = 0,
|
|
||||||
bool includeEntities = false);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
/** Emits list of favorited statuses */
|
|
||||||
void parsedFavorites(const QList<QTweetStatus>& favorites);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETFAVORITES_H
|
|
@@ -1,83 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include "qtweetfavoritescreate.h"
|
|
||||||
#include "qtweetstatus.h"
|
|
||||||
#include "qtweetconvert.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
QTweetFavoritesCreate::QTweetFavoritesCreate(QObject *parent) :
|
|
||||||
QTweetNetBase(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param oauthTwitter OAuthTwitter object
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
QTweetFavoritesCreate::QTweetFavoritesCreate(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QTweetNetBase(oauthTwitter, parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts creating favorited statues
|
|
||||||
* @param statusid ID of the desired status to be favorited.
|
|
||||||
* @param includeEntities When set to true, each tweet will include a node called "entities,".
|
|
||||||
*/
|
|
||||||
void QTweetFavoritesCreate::create(qint64 statusid, bool includeEntities)
|
|
||||||
{
|
|
||||||
if (!isAuthenticationEnabled()) {
|
|
||||||
qCritical("Needs authentication to be enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl url(QString("http://api.twitter.com/1/favorites/create/%1.json").arg(statusid));
|
|
||||||
|
|
||||||
if (includeEntities)
|
|
||||||
url.addQueryItem("include_entities", "true");
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::POST);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->post(req, QByteArray());
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetFavoritesCreate::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
|
|
||||||
{
|
|
||||||
if (ok) {
|
|
||||||
QTweetStatus status = QTweetConvert::variantMapToStatus(json.toMap());
|
|
||||||
|
|
||||||
emit parsedStatus(status);
|
|
||||||
} else {
|
|
||||||
qDebug() << "QTweetFavoritesCreate parser error: " << errorMsg;
|
|
||||||
setLastErrorMessage(errorMsg);
|
|
||||||
emit error(JsonParsingError, errorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,46 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETFAVORITESCREATE_H
|
|
||||||
#define QTWEETFAVORITESCREATE_H
|
|
||||||
|
|
||||||
#include "qtweetnetbase.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Favorites the status specified in the ID parameter as the authenticating user.
|
|
||||||
* Emits the favorite status when successful.
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT QTweetFavoritesCreate : public QTweetNetBase
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QTweetFavoritesCreate(QObject *parent = 0);
|
|
||||||
QTweetFavoritesCreate(OAuthTwitter *oauthTwitter, QObject *parent = 0);
|
|
||||||
void create(qint64 statusid, bool includeEntities = false);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
/** Emits favorited status */
|
|
||||||
void parsedStatus(const QTweetStatus& status);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETFAVORITESCREATE_H
|
|
@@ -1,84 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include "qtweetfavoritesdestroy.h"
|
|
||||||
#include "qtweetstatus.h"
|
|
||||||
#include "qtweetconvert.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
QTweetFavoritesDestroy::QTweetFavoritesDestroy(QObject *parent) :
|
|
||||||
QTweetNetBase(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param oauthTwitter OAuthTwitter object
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
QTweetFavoritesDestroy::QTweetFavoritesDestroy(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QTweetNetBase(oauthTwitter, parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts unfavoriting status
|
|
||||||
* @param statusid ID of the desired status
|
|
||||||
* @param includeEntities When set to true, each tweet will include a node called "entities,"
|
|
||||||
*/
|
|
||||||
void QTweetFavoritesDestroy::unfavorite(qint64 statusid, bool includeEntities)
|
|
||||||
{
|
|
||||||
if (!isAuthenticationEnabled()) {
|
|
||||||
qCritical("Needs authentication to be enabled");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
QUrl url(QString("http://api.twitter.com/1/favorites/destroy/%1.json").arg(statusid));
|
|
||||||
|
|
||||||
if (includeEntities)
|
|
||||||
url.addQueryItem("include_entities", "true");
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::DELETE);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->deleteResource(req);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetFavoritesDestroy::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
|
|
||||||
{
|
|
||||||
if (ok) {
|
|
||||||
QTweetStatus status = QTweetConvert::variantMapToStatus(json.toMap());
|
|
||||||
|
|
||||||
emit parsedStatus(status);
|
|
||||||
} else {
|
|
||||||
qDebug() << "QTweetFavoritesDestroy parser error: " << errorMsg;
|
|
||||||
setLastErrorMessage(errorMsg);
|
|
||||||
emit error(JsonParsingError, errorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@@ -1,46 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QTWEETFAVORITESDESTROY_H
|
|
||||||
#define QTWEETFAVORITESDESTROY_H
|
|
||||||
|
|
||||||
#include "qtweetnetbase.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Un-favorites the status specified in the ID parameter as the authenticating user.
|
|
||||||
* Emits the un-favorited status when successful.
|
|
||||||
*/
|
|
||||||
class QTWEETLIBSHARED_EXPORT QTweetFavoritesDestroy : public QTweetNetBase
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QTweetFavoritesDestroy(QObject *parent = 0);
|
|
||||||
QTweetFavoritesDestroy(OAuthTwitter *oauthTwitter, QObject *parent = 0);
|
|
||||||
void unfavorite(qint64 statusid, bool includeEntities = false);
|
|
||||||
|
|
||||||
signals:
|
|
||||||
/** Emits the unfavorited status */
|
|
||||||
void parsedStatus(const QTweetStatus& status);
|
|
||||||
|
|
||||||
protected slots:
|
|
||||||
void parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg);
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // QTWEETFAVORITESDESTROY_H
|
|
@@ -1,111 +0,0 @@
|
|||||||
/* Copyright (c) 2010, Antonie Jovanoski
|
|
||||||
*
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
* Contact e-mail: Antonie Jovanoski <minimoog77_at_gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <QtDebug>
|
|
||||||
#include <QNetworkRequest>
|
|
||||||
#include <QNetworkReply>
|
|
||||||
#include "qtweetfollowersid.h"
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*/
|
|
||||||
QTweetFollowersID::QTweetFollowersID(QObject *parent) :
|
|
||||||
QTweetNetBase(parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
* @param oauthTwitter OAuthTwitter object
|
|
||||||
* @param parent parent QObject
|
|
||||||
*/
|
|
||||||
QTweetFollowersID::QTweetFollowersID(OAuthTwitter *oauthTwitter, QObject *parent) :
|
|
||||||
QTweetNetBase(oauthTwitter, parent)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts fetching one page of id's
|
|
||||||
* @param user the ID of the user for whom to return results for.
|
|
||||||
* @param cursor use from signal response nextCursor and prevCursor to allow paging back and forth
|
|
||||||
*/
|
|
||||||
void QTweetFollowersID::fetch(qint64 user, const QString &cursor)
|
|
||||||
{
|
|
||||||
QUrl url("http://api.twitter.com/1/followers/ids.json");
|
|
||||||
|
|
||||||
url.addQueryItem("user_id", QString::number(user));
|
|
||||||
url.addQueryItem("cursor", cursor);
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
if (isAuthenticationEnabled()) {
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::GET);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->get(req);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts fetching one page of id's
|
|
||||||
* @param screenName the screen name of the user for whom to return results for.
|
|
||||||
* @param cursor use from signal response nextCursor and prevCursor to allow paging back and forth
|
|
||||||
*/
|
|
||||||
void QTweetFollowersID::fetch(const QString &screenName, const QString &cursor)
|
|
||||||
{
|
|
||||||
QUrl url("http://api.twitter.com/1/followers/ids.json");
|
|
||||||
|
|
||||||
url.addQueryItem("screen_name", screenName);
|
|
||||||
url.addQueryItem("cursor", cursor);
|
|
||||||
|
|
||||||
QNetworkRequest req(url);
|
|
||||||
|
|
||||||
if (isAuthenticationEnabled()) {
|
|
||||||
QByteArray oauthHeader = oauthTwitter()->generateAuthorizationHeader(url, OAuth::GET);
|
|
||||||
req.setRawHeader(AUTH_HEADER, oauthHeader);
|
|
||||||
}
|
|
||||||
|
|
||||||
QNetworkReply *reply = oauthTwitter()->networkAccessManager()->get(req);
|
|
||||||
connect(reply, SIGNAL(finished()), this, SLOT(reply()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void QTweetFollowersID::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
|
|
||||||
{
|
|
||||||
if (ok) {
|
|
||||||
QList<qint64> idList;
|
|
||||||
|
|
||||||
QVariantMap respMap = json.toMap();
|
|
||||||
|
|
||||||
QVariantList idVarList = respMap["ids"].toList();
|
|
||||||
|
|
||||||
foreach (const QVariant& idVar, idVarList)
|
|
||||||
idList.append(idVar.toLongLong());
|
|
||||||
|
|
||||||
QString nextCursor = respMap["next_cursor_str"].toString();
|
|
||||||
QString prevCursor = respMap["previous_cursor_str"].toString();
|
|
||||||
|
|
||||||
emit parsedIDs(idList, nextCursor, prevCursor);
|
|
||||||
} else {
|
|
||||||
qDebug() << "QTweetFollowersID parser error: " << errorMsg;
|
|
||||||
setLastErrorMessage(errorMsg);
|
|
||||||
emit error(JsonParsingError, errorMsg);
|
|
||||||
}
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user