summaryrefslogtreecommitdiffstats
path: root/kopete/plugins/motionautoaway
diff options
context:
space:
mode:
authortoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
committertoma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da>2009-11-25 17:56:58 +0000
commitbcb704366cb5e333a626c18c308c7e0448a8e69f (patch)
treef0d6ab7d78ecdd9207cf46536376b44b91a1ca71 /kopete/plugins/motionautoaway
downloadtdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.tar.gz
tdenetwork-bcb704366cb5e333a626c18c308c7e0448a8e69f.zip
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdenetwork@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kopete/plugins/motionautoaway')
-rw-r--r--kopete/plugins/motionautoaway/COPYING.motion339
-rw-r--r--kopete/plugins/motionautoaway/Makefile.am24
-rw-r--r--kopete/plugins/motionautoaway/configure.in.in18
-rw-r--r--kopete/plugins/motionautoaway/kopete_motionaway.desktop115
-rw-r--r--kopete/plugins/motionautoaway/kopete_motionaway_config.desktop111
-rw-r--r--kopete/plugins/motionautoaway/motionawayconfig.kcfg25
-rw-r--r--kopete/plugins/motionautoaway/motionawayconfig.kcfgc8
-rw-r--r--kopete/plugins/motionautoaway/motionawayplugin.cpp308
-rw-r--r--kopete/plugins/motionautoaway/motionawayplugin.h93
-rw-r--r--kopete/plugins/motionautoaway/motionawaypreferences.cpp70
-rw-r--r--kopete/plugins/motionautoaway/motionawaypreferences.h45
-rw-r--r--kopete/plugins/motionautoaway/motionawayprefs.ui297
12 files changed, 1453 insertions, 0 deletions
diff --git a/kopete/plugins/motionautoaway/COPYING.motion b/kopete/plugins/motionautoaway/COPYING.motion
new file mode 100644
index 00000000..96bdc086
--- /dev/null
+++ b/kopete/plugins/motionautoaway/COPYING.motion
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+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 Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) 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; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, 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 executable. However, as a
+special exception, the source code 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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+ 5. 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 Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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 to
+this License.
+
+ 7. 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 Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies 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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. 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 PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/kopete/plugins/motionautoaway/Makefile.am b/kopete/plugins/motionautoaway/Makefile.am
new file mode 100644
index 00000000..ff2c5bd8
--- /dev/null
+++ b/kopete/plugins/motionautoaway/Makefile.am
@@ -0,0 +1,24 @@
+METASOURCES = AUTO
+
+AM_CPPFLAGS = $(KOPETE_INCLUDES) $(all_includes)
+
+kde_module_LTLIBRARIES = kopete_motionaway.la kcm_kopete_motionaway.la
+
+kopete_motionaway_la_SOURCES = motionawayplugin.cpp motionawayconfig.kcfgc
+kopete_motionaway_la_LDFLAGS = -module $(KDE_PLUGIN)
+kopete_motionaway_la_LIBADD = ../../libkopete/libkopete.la
+
+kcm_kopete_motionaway_la_SOURCES = motionawayprefs.ui motionawaypreferences.cpp motionawayconfig.kcfgc
+kcm_kopete_motionaway_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) $(all_libraries)
+kcm_kopete_motionaway_la_LIBADD = $(LIB_KOPETECOMPAT) $(LIB_KUTILS)
+
+
+
+service_DATA = kopete_motionaway.desktop
+servicedir = $(kde_servicesdir)
+
+kcm_DATA = kopete_motionaway_config.desktop
+kcmdir = $(kde_servicesdir)/kconfiguredialog
+kde_kcfg_DATA = motionawayconfig.kcfg
+
+
diff --git a/kopete/plugins/motionautoaway/configure.in.in b/kopete/plugins/motionautoaway/configure.in.in
new file mode 100644
index 00000000..5533607f
--- /dev/null
+++ b/kopete/plugins/motionautoaway/configure.in.in
@@ -0,0 +1,18 @@
+dnl Only compile motionautoaway on Linux (needs video4linux)
+
+dnl Disabled for now. It breaks with patched Linux 2.4 kernels and
+dnl vanilla Linux 2.5 and 2.6 kernels
+
+#AC_MSG_CHECKING([if motionautoaway plugin should be compiled])
+
+#if test "x`uname`" = "xLinux"; then
+# COMPILEMOTION=true
+# AC_SUBST(COMPILEMOTION)
+# AC_MSG_RESULT([yes])
+#else
+ COMPILEMOTION=
+# AC_SUBST(COMPILEMOTION)
+# AC_MSG_RESULT([no])
+#fi
+
+AM_CONDITIONAL(include_motionautoaway, test -n "$COMPILEMOTION")
diff --git a/kopete/plugins/motionautoaway/kopete_motionaway.desktop b/kopete/plugins/motionautoaway/kopete_motionaway.desktop
new file mode 100644
index 00000000..93c8d617
--- /dev/null
+++ b/kopete/plugins/motionautoaway/kopete_motionaway.desktop
@@ -0,0 +1,115 @@
+[Desktop Entry]
+Type=Service
+X-Kopete-Version=1000900
+ServiceTypes=Kopete/Plugin
+X-KDE-Library=kopete_motionaway
+X-KDE-PluginInfo-Author=Duncan Mac-Vicar Prett
+X-KDE-PluginInfo-Email=duncan@kde.org
+X-KDE-PluginInfo-Name=kopete_motionaway
+X-KDE-PluginInfo-Version=0.8.0
+X-KDE-PluginInfo-Website=http://kopete.kde.org
+X-KDE-PluginInfo-Category=Plugins
+X-KDE-PluginInfo-Depends=
+X-KDE-PluginInfo-License=GPL
+X-KDE-PluginInfo-EnabledByDefault=false
+Name=Motion Auto-Away
+Name[ar]=حركة التبعيد التلقائية
+Name[bg]=Промяна на състоянието
+Name[bn]=চলাচল স্বয়ংক্রীয়-অনুপস্থিতি
+Name[bs]=Auto-odsutnost na osnovu kretanja
+Name[ca]=Auto-absent per moviment
+Name[cs]=Nepřítomnost podle pohybu
+Name[cy]=Dim Yma (Dim Symudiad)
+Name[da]=Bevægelses-auto-borte
+Name[de]=Auto-Abwesenheit
+Name[el]=Αυτόματη μετάβαση σε απουσία
+Name[es]=Ausencia automática por movimiento
+Name[et]=Automaatne äraolek
+Name[eu]=Auto-urrunduta
+Name[fa]=حرکت خودکار دور
+Name[fi]=Liikeen perusteella poistuminen
+Name[fr]=Détection de mouvement
+Name[gl]=Auto-alonxamento
+Name[he]=מסמן "לא נמצא" בהתאם לתנועה
+Name[hi]=मोशन आटो अवे
+Name[hr]=Automatska odsutnost u nedostatku pokreta
+Name[hu]=A távollét érzékelése mozgásdetektálással
+Name[it]=Automaticamente "assente" se inutilizzato
+Name[ja]=自動不在時の動作
+Name[ka]=ავტო-გასვლა
+Name[kk]=Орында жоқ күйін автоорнату
+Name[km]=ចលនា​ស្វ័យប្រវត្តិ ពេល​មិន​នៅ
+Name[lt]=Judėjimas „Pasitraukęs“
+Name[mk]=Авто-отсутен за движење
+Name[nb]=Bli borte automatisk
+Name[nds]=Auto-Wegwesen
+Name[ne]=चाल स्वत: बाहिर
+Name[nl]=Automatisch afwezig
+Name[nn]=Bli vekke automatisk
+Name[pl]=Wykrywanie nieaktywności za pomocą czujnika ruchu
+Name[pt]=Ausência Automática por Movimento
+Name[pt_BR]=Ausente Automático
+Name[ru]=Автоопределение отсутствия
+Name[sk]=Automatická prítomnosť podľa pohybu
+Name[sl]=Samo-odsotnost (premikanje)
+Name[sr]=Аутоматска одсутност без покретâ
+Name[sr@Latn]=Automatska odsutnost bez pokretâ
+Name[sv]=Automatisk rörelsefrånvaro
+Name[ta]=அகராதி
+Name[tg]=Ҳаракати Ақибгардии Худкор
+Name[tr]=Otomatik Uzakta Hareketi
+Name[uk]=Автовиявлення відсутності
+Name[zh_CN]=自动离开
+Name[zh_HK]=動作感應器
+Name[zh_TW]=動作偵測自動離開
+Comment=Sets away status when not detecting movement near the computer
+Comment[ar]=يحول وضع الاتصال إلى في الخارج عندما لا يتم تحديد تعاملات مع الكومبيوتر
+Comment[bg]=Промяна на състоянието, когато няма активност от страна на потребителя
+Comment[bn]=যখন কম্পিউটারের কাছে কোনও চলাচল অনুভূত হয়না তখন অনুপস্থিত অবস্থা নিযুক্ত করে
+Comment[bs]=Postavlja status odsutnosti ako nije detektovano kretanje u blizini računara
+Comment[ca]=Estableix l'estatus d'absent en no detectar moviment a l'ordinador
+Comment[cs]=Nastaví automaticky stav "nepřítomen" při absenci pohybu
+Comment[cy]=Gosod cyflwr i "i fwrdd" os na chanfyddir symudiad wrth ymyl y cyfrifiadur
+Comment[da]=Sætter borte-status når ingen bevægelse detekteres nær computeren
+Comment[de]=Setzt automatisch den Status auf abwesend, wenn keine Aktivität am Rechner feststellbar ist
+Comment[el]=Ορίζει την κατάσταση σε απουσία όταν δεν ανιχνεύει κίνηση κοντά στον υπολογιστή
+Comment[es]=Se pone en estado Ausente cuando no se detecte movimiento cerca de su equipo
+Comment[et]=Määrab äraoleku staatuse, kui arvuti juures mingit elutegevust ei täheldata
+Comment[eu]=Ezarri urrunduta egoera konputagailuan mugimendurik ez dagoenean
+Comment[fa]=اگر هیچ حرکتی نزدیک رایانۀ شما آشکار نشود، وضعیت را کنار می‌گذارد
+Comment[fi]=Asettaa poissaolevaksi, jos koneen lähistöllä ei havaita liikettä
+Comment[fr]=Active l'état absent lorsque aucune activité n'est détectée près de l'ordinateur
+Comment[gl]=Pónse en estado alonxado cando non se detectan movementos preto do seu ordenador
+Comment[he]=מגדיר מצב "לא נמצא" בעת חוסר פעילות על המחשב
+Comment[hi]=जब कम्प्यूटर के आसपास गतिविधि पता नहीं लगता है तो स्थिति को दूर नियत करता है
+Comment[hr]=Postavlja status „odsutan“ kada ne detektira pomicanje u blizini računala
+Comment[hu]=A távolléti állapot automatikus beállítása, ha nincs mozgás a számítógép körül
+Comment[is]=Breytir stöðu þinni ef tölvan er ekki notkun
+Comment[it]=Imposta lo stato ad assente quando non viene rilevato nessun movimento
+Comment[ja]=コンピュータの近くにいない場合、不在状態にセットします
+Comment[ka]=აყენებს გასვლის სტატუსს როდესაც კომპიუტერთან აქტივობა არ შეიმჩნევა
+Comment[kk]=Компьютерде қимыл жоқты байқап орында жоқ деген күйді орнатады
+Comment[km]=កំណត់​ស្ថានភាព​មិន​នៅ នៅ​ពេល​កុំព្យូទ័រ និង​អ្វីៗ​នៅ​ជិត​វា មិន​កម្រើក
+Comment[lt]=Būklė nustatoma „Pasitraukęs“, jei šalia kompiuterio nėra jokio judėjimo
+Comment[mk]=Го поставува статусот отсутен кога нема движење на компјутерот
+Comment[nb]=Sett som borte når det ikke er noen bevegelse på mus eller tastatur
+Comment[nds]=Stellt den Status automaatsch op "Nich dor", wenn sik an'n Reekner nix deit
+Comment[ne]=कम्प्युटर नजिक चाल पत्ता नलाग्दा वस्तुस्थिति बाहिर सेट गर्दछ
+Comment[nl]=Stelt automatisch afwezigheid in als er geen beweging wordt gedetecteerd
+Comment[nn]=Set som vekke når det ikkje er noka rørsle på mus eller tastatur
+Comment[pl]=Ustawia status "Zaraz wracam", gdy nie wykrywa żadnego ruchu w pobliżu komputera
+Comment[pt]=Configura o estado de ausência ao não detectar movimento perto do computador
+Comment[pt_BR]=Configura o status de ausente quando não detectar movimento próximo ao computador
+Comment[ru]=Устанавливает состояние "отсутствует", если работа за компьютером не регистрируется в течение долгого времени
+Comment[sk]=Nastaví stav prítomnosti podľa toho, či bol zaznamenaný pohyb pri počítači
+Comment[sl]=Nastavi stanje odsotnosti, ko ni premikanja v bližini računalnika
+Comment[sr]=Поставља статус „одсутан“ када не детектује померање у близини рачунара
+Comment[sr@Latn]=Postavlja status „odsutan“ kada ne detektuje pomeranje u blizini računara
+Comment[sv]=Ställer automatisk in frånvarostatus när ingen rörelse märks nära datorn
+Comment[ta]=கணிப்பொறியின் அருகே நடக்கும் இயக்கத்தை கண்டுபிடிக்காத போது அமைக்கும்
+Comment[tg]=Ҳангоми муайян накардани ҳаракат дар назди компютер ҳолатро дур месозад
+Comment[tr]=Bilgisayarın başında olunmadığı algılanırsa uzakta olarak belirler
+Comment[uk]=Встановлює стан у значення "відсутній", якщо не реєструється робота за комп'ютером
+Comment[zh_CN]=根据计算机旁的状态设置离开状态
+Comment[zh_HK]=偵測不到電腦附近有動作時將狀態設為「離開」
+Comment[zh_TW]=當偵測不到動作時自動設為離開
diff --git a/kopete/plugins/motionautoaway/kopete_motionaway_config.desktop b/kopete/plugins/motionautoaway/kopete_motionaway_config.desktop
new file mode 100644
index 00000000..ffe5775b
--- /dev/null
+++ b/kopete/plugins/motionautoaway/kopete_motionaway_config.desktop
@@ -0,0 +1,111 @@
+[Desktop Entry]
+Type=Service
+ServiceTypes=KCModule
+
+X-KDE-ModuleType=Library
+X-KDE-Library=kopete_motionaway
+X-KDE-FactoryName=MotionAwayConfigFactory
+X-KDE-ParentApp=kopete_motionaway
+X-KDE-ParentComponents=kopete_motionaway
+
+Name=Motion Auto-Away
+Name[ar]=حركة التبعيد التلقائية
+Name[bg]=Промяна на състоянието
+Name[bn]=চলাচল স্বয়ংক্রীয়-অনুপস্থিতি
+Name[bs]=Auto-odsutnost na osnovu kretanja
+Name[ca]=Auto-absent per moviment
+Name[cs]=Nepřítomnost podle pohybu
+Name[cy]=Dim Yma (Dim Symudiad)
+Name[da]=Bevægelses-auto-borte
+Name[de]=Auto-Abwesenheit
+Name[el]=Αυτόματη μετάβαση σε απουσία
+Name[es]=Ausencia automática por movimiento
+Name[et]=Automaatne äraolek
+Name[eu]=Auto-urrunduta
+Name[fa]=حرکت خودکار دور
+Name[fi]=Liikeen perusteella poistuminen
+Name[fr]=Détection de mouvement
+Name[gl]=Auto-alonxamento
+Name[he]=מסמן "לא נמצא" בהתאם לתנועה
+Name[hi]=मोशन आटो अवे
+Name[hr]=Automatska odsutnost u nedostatku pokreta
+Name[hu]=A távollét érzékelése mozgásdetektálással
+Name[it]=Automaticamente "assente" se inutilizzato
+Name[ja]=自動不在時の動作
+Name[ka]=ავტო-გასვლა
+Name[kk]=Орында жоқ күйін автоорнату
+Name[km]=ចលនា​ស្វ័យប្រវត្តិ ពេល​មិន​នៅ
+Name[lt]=Judėjimas „Pasitraukęs“
+Name[mk]=Авто-отсутен за движење
+Name[nb]=Bli borte automatisk
+Name[nds]=Auto-Wegwesen
+Name[ne]=चाल स्वत: बाहिर
+Name[nl]=Automatisch afwezig
+Name[nn]=Bli vekke automatisk
+Name[pl]=Wykrywanie nieaktywności za pomocą czujnika ruchu
+Name[pt]=Ausência Automática por Movimento
+Name[pt_BR]=Ausente Automático
+Name[ru]=Автоопределение отсутствия
+Name[sk]=Automatická prítomnosť podľa pohybu
+Name[sl]=Samo-odsotnost (premikanje)
+Name[sr]=Аутоматска одсутност без покретâ
+Name[sr@Latn]=Automatska odsutnost bez pokretâ
+Name[sv]=Automatisk rörelsefrånvaro
+Name[ta]=அகராதி
+Name[tg]=Ҳаракати Ақибгардии Худкор
+Name[tr]=Otomatik Uzakta Hareketi
+Name[uk]=Автовиявлення відсутності
+Name[zh_CN]=自动离开
+Name[zh_HK]=動作感應器
+Name[zh_TW]=動作偵測自動離開
+Comment=Sets away status when not detecting movement near the computer
+Comment[ar]=يحول وضع الاتصال إلى في الخارج عندما لا يتم تحديد تعاملات مع الكومبيوتر
+Comment[bg]=Промяна на състоянието, когато няма активност от страна на потребителя
+Comment[bn]=যখন কম্পিউটারের কাছে কোনও চলাচল অনুভূত হয়না তখন অনুপস্থিত অবস্থা নিযুক্ত করে
+Comment[bs]=Postavlja status odsutnosti ako nije detektovano kretanje u blizini računara
+Comment[ca]=Estableix l'estatus d'absent en no detectar moviment a l'ordinador
+Comment[cs]=Nastaví automaticky stav "nepřítomen" při absenci pohybu
+Comment[cy]=Gosod cyflwr i "i fwrdd" os na chanfyddir symudiad wrth ymyl y cyfrifiadur
+Comment[da]=Sætter borte-status når ingen bevægelse detekteres nær computeren
+Comment[de]=Setzt automatisch den Status auf abwesend, wenn keine Aktivität am Rechner feststellbar ist
+Comment[el]=Ορίζει την κατάσταση σε απουσία όταν δεν ανιχνεύει κίνηση κοντά στον υπολογιστή
+Comment[es]=Se pone en estado Ausente cuando no se detecte movimiento cerca de su equipo
+Comment[et]=Määrab äraoleku staatuse, kui arvuti juures mingit elutegevust ei täheldata
+Comment[eu]=Ezarri urrunduta egoera konputagailuan mugimendurik ez dagoenean
+Comment[fa]=اگر هیچ حرکتی نزدیک رایانۀ شما آشکار نشود، وضعیت را کنار می‌گذارد
+Comment[fi]=Asettaa poissaolevaksi, jos koneen lähistöllä ei havaita liikettä
+Comment[fr]=Active l'état absent lorsque aucune activité n'est détectée près de l'ordinateur
+Comment[gl]=Pónse en estado alonxado cando non se detectan movementos preto do seu ordenador
+Comment[he]=מגדיר מצב "לא נמצא" בעת חוסר פעילות על המחשב
+Comment[hi]=जब कम्प्यूटर के आसपास गतिविधि पता नहीं लगता है तो स्थिति को दूर नियत करता है
+Comment[hr]=Postavlja status „odsutan“ kada ne detektira pomicanje u blizini računala
+Comment[hu]=A távolléti állapot automatikus beállítása, ha nincs mozgás a számítógép körül
+Comment[is]=Breytir stöðu þinni ef tölvan er ekki notkun
+Comment[it]=Imposta lo stato ad assente quando non viene rilevato nessun movimento
+Comment[ja]=コンピュータの近くにいない場合、不在状態にセットします
+Comment[ka]=აყენებს გასვლის სტატუსს როდესაც კომპიუტერთან აქტივობა არ შეიმჩნევა
+Comment[kk]=Компьютерде қимыл жоқты байқап орында жоқ деген күйді орнатады
+Comment[km]=កំណត់​ស្ថានភាព​មិន​នៅ នៅ​ពេល​កុំព្យូទ័រ និង​អ្វីៗ​នៅ​ជិត​វា មិន​កម្រើក
+Comment[lt]=Būklė nustatoma „Pasitraukęs“, jei šalia kompiuterio nėra jokio judėjimo
+Comment[mk]=Го поставува статусот отсутен кога нема движење на компјутерот
+Comment[nb]=Sett som borte når det ikke er noen bevegelse på mus eller tastatur
+Comment[nds]=Stellt den Status automaatsch op "Nich dor", wenn sik an'n Reekner nix deit
+Comment[ne]=कम्प्युटर नजिक चाल पत्ता नलाग्दा वस्तुस्थिति बाहिर सेट गर्दछ
+Comment[nl]=Stelt automatisch afwezigheid in als er geen beweging wordt gedetecteerd
+Comment[nn]=Set som vekke når det ikkje er noka rørsle på mus eller tastatur
+Comment[pl]=Ustawia status "Zaraz wracam", gdy nie wykrywa żadnego ruchu w pobliżu komputera
+Comment[pt]=Configura o estado de ausência ao não detectar movimento perto do computador
+Comment[pt_BR]=Configura o status de ausente quando não detectar movimento próximo ao computador
+Comment[ru]=Устанавливает состояние "отсутствует", если работа за компьютером не регистрируется в течение долгого времени
+Comment[sk]=Nastaví stav prítomnosti podľa toho, či bol zaznamenaný pohyb pri počítači
+Comment[sl]=Nastavi stanje odsotnosti, ko ni premikanja v bližini računalnika
+Comment[sr]=Поставља статус „одсутан“ када не детектује померање у близини рачунара
+Comment[sr@Latn]=Postavlja status „odsutan“ kada ne detektuje pomeranje u blizini računara
+Comment[sv]=Ställer automatisk in frånvarostatus när ingen rörelse märks nära datorn
+Comment[ta]=கணிப்பொறியின் அருகே நடக்கும் இயக்கத்தை கண்டுபிடிக்காத போது அமைக்கும்
+Comment[tg]=Ҳангоми муайян накардани ҳаракат дар назди компютер ҳолатро дур месозад
+Comment[tr]=Bilgisayarın başında olunmadığı algılanırsa uzakta olarak belirler
+Comment[uk]=Встановлює стан у значення "відсутній", якщо не реєструється робота за комп'ютером
+Comment[zh_CN]=根据计算机旁的状态设置离开状态
+Comment[zh_HK]=偵測不到電腦附近有動作時將狀態設為「離開」
+Comment[zh_TW]=當偵測不到動作時自動設為離開
diff --git a/kopete/plugins/motionautoaway/motionawayconfig.kcfg b/kopete/plugins/motionautoaway/motionawayconfig.kcfg
new file mode 100644
index 00000000..9bad717c
--- /dev/null
+++ b/kopete/plugins/motionautoaway/motionawayconfig.kcfg
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
+ http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
+ <kcfgfile name="motionawayconfig" />
+ <group name="MotionAutoAway Plugin" >
+ <entry key="BecomeAvailableWithActivity" type="Bool" >
+ <label>Become available again when the plugin detects motion</label>
+ <whatsthis>If this option is set, the plugin will put you in status available if you are away and it detects motion again.</whatsthis>
+ <default>true</default>
+ </entry>
+ <entry key="VideoDevice" type="Path" >
+ <label>Video device to use for motion detection</label>
+ <whatsthis>This is the Video4Linux path of the camera or device you want to use to detect motion. In most systems the first video device is /dev/v4l/video0.</whatsthis>
+ <default>/dev/v4l/video0</default>
+ </entry>
+ <entry key="AwayTimeout" type="UInt" >
+ <label>Become away after this many minutes of inactivity</label>
+ <whatsthis>This setting affects how fast the plugin switches to away status. Once the plugin detects no motion, it will wait this amount of minutes before switching to away status.</whatsthis>
+ <default>1</default>
+ <min>0</min>
+ </entry>
+ </group>
+</kcfg>
diff --git a/kopete/plugins/motionautoaway/motionawayconfig.kcfgc b/kopete/plugins/motionautoaway/motionawayconfig.kcfgc
new file mode 100644
index 00000000..52f9d6ca
--- /dev/null
+++ b/kopete/plugins/motionautoaway/motionawayconfig.kcfgc
@@ -0,0 +1,8 @@
+ClassName=MotionAwayConfig
+File=motionawayconfig.kcfg
+GlobalEnums=true
+ItemAccessors=true
+MemberVariables=private
+Mutators=true
+SetUserTexts=false
+Singleton=true
diff --git a/kopete/plugins/motionautoaway/motionawayplugin.cpp b/kopete/plugins/motionautoaway/motionawayplugin.cpp
new file mode 100644
index 00000000..d534a186
--- /dev/null
+++ b/kopete/plugins/motionautoaway/motionawayplugin.cpp
@@ -0,0 +1,308 @@
+/*
+ motionawayplugin.cpp
+
+ Kopete Motion Detector Auto-Away plugin
+
+ Copyright (c) 2002 by Duncan Mac-Vicar Prett <duncan@kde.org>
+
+ Contains code from motion.c ( Detect changes in a video stream )
+ Copyright 2000 by Jeroen Vreeken (pe1rxq@amsat.org)
+ Distributed under the GNU public license version 2
+ See also the file 'COPYING.motion'
+
+ Kopete (c) 2002 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#include "config.h"
+
+#include "motionawayplugin.h"
+
+#include <fcntl.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/poll.h>
+#include <sys/types.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <qtimer.h>
+
+#include <kconfig.h>
+#include <kdebug.h>
+#include <kgenericfactory.h>
+
+#include "kopeteaccountmanager.h"
+#include "kopeteaway.h"
+/* The following is a hack:
+ * e.g. Mandrake 9.x ships with a patched
+ * kernel which doesn't define this 64 bit types (we need GNU C lib
+ * because we use long long and warning - gcc extensions.)
+ *
+ * This is caused by the !defined(__STRICT_ANSI__) check in
+ * /usr/include/asm/types.h
+ */
+#if !defined(__u64) && defined(__GNUC__)
+#if SIZEOF_UNSIGNED_LONG >= 8
+typedef unsigned long __u64;
+#else
+typedef unsigned long long __u64;
+#endif
+#endif
+
+#if !defined(__s64) && defined(__GNUC__)
+#if SIZEOF_LONG >= 8
+typedef signed long __s64;
+#else
+typedef __signed__ long long __s64;
+#endif
+#endif
+/*
+ * End hack
+ */
+
+#include <linux/version.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,50)
+#define _LINUX_TIME_H
+#endif
+#include <linux/videodev.h>
+
+#define DEF_WIDTH 352
+#define DEF_HEIGHT 288
+#define DEF_QUALITY 50
+#define DEF_CHANGES 5000
+
+#define DEF_POLL_INTERVAL 1500
+
+#define DEF_GAP 60*5 /* 5 minutes */
+
+#define NORM_DEFAULT 0
+#define IN_DEFAULT 8
+
+typedef KGenericFactory<MotionAwayPlugin> MotionAwayPluginFactory;
+K_EXPORT_COMPONENT_FACTORY( kopete_motionaway, MotionAwayPluginFactory( "kopete_motionaway" ) )
+
+MotionAwayPlugin::MotionAwayPlugin( QObject *parent, const char *name, const QStringList & /* args */ )
+: Kopete::Plugin( MotionAwayPluginFactory::instance(), parent, name )
+{
+ kdDebug(14305) << k_funcinfo << "Called." << endl;
+ /* This should be read from config someday may be */
+ m_width = DEF_WIDTH;
+ m_height = DEF_HEIGHT;
+ m_quality = DEF_QUALITY;
+ m_maxChanges = DEF_CHANGES;
+ m_gap = DEF_GAP;
+
+ /* We haven't took the first picture yet */
+ m_tookFirst = false;
+
+ m_captureTimer = new QTimer(this);
+ m_awayTimer = new QTimer(this);
+
+ connect( m_captureTimer, SIGNAL(timeout()), this, SLOT(slotCapture()) );
+ connect( m_awayTimer, SIGNAL(timeout()), this, SLOT(slotTimeout()) );
+
+ signal(SIGCHLD, SIG_IGN);
+
+ m_imageRef.resize( m_width * m_height * 3);
+ m_imageNew.resize( m_width * m_height * 3);
+ m_imageOld.resize( m_width * m_height * 3);
+ m_imageOut.resize( m_width * m_height * 3);
+
+
+ kdDebug(14305) << k_funcinfo << "Opening Video4Linux Device" << endl;
+
+ m_deviceHandler = open( videoDevice.latin1() , O_RDWR);
+
+ if (m_deviceHandler < 0)
+ {
+ kdDebug(14305) << k_funcinfo << "Can't open Video4Linux Device" << endl;
+ }
+ else
+ {
+ kdDebug(14305) << k_funcinfo << "Worked! Setting Capture timers!" << endl;
+ /* Capture first image, or we will get a alarm on start */
+ getImage (m_deviceHandler, m_imageRef, DEF_WIDTH, DEF_HEIGHT, IN_DEFAULT, NORM_DEFAULT,
+ VIDEO_PALETTE_RGB24);
+
+ /* We have the first image now */
+ m_tookFirst = true;
+ m_wentAway = false;
+
+ m_captureTimer->start( DEF_POLL_INTERVAL );
+ m_awayTimer->start( awayTimeout * 60 * 1000 );
+ }
+ loadSettings();
+ connect(this, SIGNAL(settingsChanged()), this, SLOT( loadSettings() ) );
+}
+
+MotionAwayPlugin::~MotionAwayPlugin()
+{
+ kdDebug(14305) << k_funcinfo << "Closing Video4Linux Device" << endl;
+ close (m_deviceHandler);
+ kdDebug(14305) << k_funcinfo << "Freeing memory" << endl;
+}
+
+void MotionAwayPlugin::loadSettings(){
+ KConfig *kconfig = KGlobal::config();
+ kconfig->setGroup("MotionAway Plugin");
+
+ awayTimeout = kconfig->readNumEntry("AwayTimeout", 1);
+ becomeAvailableWithActivity = kconfig->readBoolEntry("BecomeAvailableWithActivity", true);
+ videoDevice = kconfig->readEntry("VideoDevice", "/dev/video0");
+ m_awayTimer->changeInterval(awayTimeout * 60 * 1000);
+}
+
+int MotionAwayPlugin::getImage(int _dev, QByteArray &_image, int _width, int _height, int _input, int _norm, int _fmt)
+{
+ struct video_capability vid_caps;
+ struct video_channel vid_chnl;
+ struct video_window vid_win;
+ struct pollfd video_fd;
+
+ // Just to avoid a warning
+ _fmt = 0;
+
+ if (ioctl (_dev, VIDIOCGCAP, &vid_caps) == -1)
+ {
+ perror ("ioctl (VIDIOCGCAP)");
+ return (-1);
+ }
+ /* Set channels and norms, NOT TESTED my philips cam doesn't have a
+ * tuner. */
+ if (_input != IN_DEFAULT)
+ {
+ vid_chnl.channel = -1;
+ if (ioctl (_dev, VIDIOCGCHAN, &vid_chnl) == -1)
+ {
+ perror ("ioctl (VIDIOCGCHAN)");
+ }
+ else
+ {
+ vid_chnl.channel = _input;
+ vid_chnl.norm = _norm;
+
+ if (ioctl (_dev, VIDIOCSCHAN, &vid_chnl) == -1)
+ {
+ perror ("ioctl (VIDIOCSCHAN)");
+ return (-1);
+ }
+ }
+ }
+ /* Set image size */
+ if (ioctl (_dev, VIDIOCGWIN, &vid_win) == -1)
+ return (-1);
+
+ vid_win.width=_width;
+ vid_win.height=_height;
+
+ if (ioctl (_dev, VIDIOCSWIN, &vid_win) == -1)
+ return (-1);
+
+ /* Check if data available on the video device */
+ video_fd.fd = _dev;
+ video_fd.events = 0;
+ video_fd.events |= POLLIN;
+ video_fd.revents = 0;
+
+ poll(&video_fd, 1, 0);
+
+ if (video_fd.revents & POLLIN) {
+ /* Read an image */
+ return read (_dev, _image.data() , _width * _height * 3);
+ } else {
+ return (-1);
+ }
+}
+
+void MotionAwayPlugin::slotCapture()
+{
+ /* Should go on forever... emphasis on 'should' */
+ if ( getImage ( m_deviceHandler, m_imageNew, m_width, m_height, IN_DEFAULT, NORM_DEFAULT,
+ VIDEO_PALETTE_RGB24) == m_width * m_height *3 )
+ {
+ int diffs = 0;
+ if ( m_tookFirst )
+ {
+ /* Make a differences picture in image_out */
+ for (int i=0; i< m_width * m_height * 3 ; i++)
+ {
+ m_imageOut[i]= m_imageOld[i]- m_imageNew[i];
+ if ((signed char)m_imageOut[i] > 32 || (signed char)m_imageOut[i] < -32)
+ {
+ m_imageOld[i] = m_imageNew[i];
+ diffs++;
+ }
+ else
+ {
+ m_imageOut[i] = 0;
+ }
+ }
+ }
+ else
+ {
+ /* First picture: new image is now the old */
+ for (int i=0; i< m_width * m_height * 3; i++)
+ m_imageOld[i] = m_imageNew[i];
+ }
+
+ /* The cat just walked in :) */
+ if (diffs > m_maxChanges)
+ {
+ kdDebug(14305) << k_funcinfo << "Motion Detected. [" << diffs << "] Reseting Timeout" << endl;
+
+ /* If we were away, now we are available again */
+ if ( becomeAvailableWithActivity && !Kopete::Away::globalAway() && m_wentAway)
+ {
+ slotActivity();
+ }
+
+ /* We reset the away timer */
+ m_awayTimer->stop();
+ m_awayTimer->start( awayTimeout * 60 * 1000 );
+ }
+
+ /* Old image slowly decays, this will make it even harder on
+ slow moving object to stay undetected */
+ /*
+ for (i=0; i<m_width*m_height*3; i++)
+ {
+ image_ref[i]=(image_ref[i]+image_new[i])/2;
+ }
+ */
+ }
+ else
+ {
+ m_captureTimer->stop();
+ }
+}
+
+void MotionAwayPlugin::slotActivity()
+{
+ kdDebug(14305) << k_funcinfo << "User activity!, going available" << endl;
+ m_wentAway = false;
+ Kopete::AccountManager::self()->setAvailableAll();
+}
+
+void MotionAwayPlugin::slotTimeout()
+{
+ if(!Kopete::Away::globalAway() && !m_wentAway)
+ {
+ kdDebug(14305) << k_funcinfo << "Timeout and no user activity, going away" << endl;
+ m_wentAway = true;
+ Kopete::AccountManager::self()->setAwayAll();
+ }
+}
+
+#include "motionawayplugin.moc"
+// vim: set noet ts=4 sts=4 sw=4:
diff --git a/kopete/plugins/motionautoaway/motionawayplugin.h b/kopete/plugins/motionautoaway/motionawayplugin.h
new file mode 100644
index 00000000..98e7e343
--- /dev/null
+++ b/kopete/plugins/motionautoaway/motionawayplugin.h
@@ -0,0 +1,93 @@
+/*
+ motionawayplugin.h
+
+ Kopete Motion Detector Auto-Away plugin
+
+ Copyright (c) 2002 by Duncan Mac-Vicar Prett <duncan@kde.org>
+
+ Contains code from motion.c ( Detect changes in a video stream )
+ Copyright 2000 by Jeroen Vreeken (pe1rxq@amsat.org)
+ Distributed under the GNU public license version 2
+ See also the file 'COPYING.motion'
+
+ Kopete (c) 2002 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#ifndef MOTIONAWAYPLUGIN_H
+#define MOTIONAWAYPLUGIN_H
+
+#include "kopeteplugin.h"
+
+class QTimer;
+
+/**
+ * @author Duncan Mac-Vicar Prett <duncan@kde.org>
+ */
+
+class MotionAwayPlugin : public Kopete::Plugin
+{
+ Q_OBJECT
+
+public:
+ MotionAwayPlugin( QObject *parent, const char *name, const QStringList &args );
+ ~MotionAwayPlugin();
+
+public slots:
+ void loadSettings();
+ void slotTimeout();
+ void slotCapture();
+ void slotActivity();
+
+private:
+ int awayTimeout;
+ bool becomeAvailableWithActivity;
+ QString videoDevice;
+
+ QTimer *m_captureTimer;
+ QTimer *m_awayTimer;
+
+ int getImage(int, QByteArray& ,int ,int ,int ,int ,int );
+
+ bool m_tookFirst;
+ bool m_wentAway;
+
+ int m_width;
+ int m_height;
+
+ int m_quality;
+ int m_maxChanges;
+
+ int m_deviceHandler;
+ int shots;
+ int m_gap;
+
+ QByteArray m_imageRef;
+ QByteArray m_imageNew;
+ QByteArray m_imageOld;
+ QByteArray m_imageOut;
+
+ /*
+ time_t currenttimep;
+ time_t lasttime;
+ struct tm *currenttime;
+
+ char file[255];
+ char filepath[255];
+ char c;
+
+ */
+};
+
+#endif
+
+// vim: set noet ts=4 sts=4 sw=4:
+
diff --git a/kopete/plugins/motionautoaway/motionawaypreferences.cpp b/kopete/plugins/motionautoaway/motionawaypreferences.cpp
new file mode 100644
index 00000000..a4962c5c
--- /dev/null
+++ b/kopete/plugins/motionautoaway/motionawaypreferences.cpp
@@ -0,0 +1,70 @@
+/*
+ Kopete Motion Detector Auto-Away plugin
+
+ Copyright (c) 2002-2004 by Duncan Mac-Vicar Prett <duncan@kde.org>
+
+ Kopete (c) 2002 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#include <qlayout.h>
+#include <qobject.h>
+#include <qcheckbox.h>
+
+#include <kgenericfactory.h>
+#include <klineedit.h>
+#include <knuminput.h>
+
+#include "motionawayprefs.h"
+#include "motionawaypreferences.h"
+#include "motionawayconfig.h"
+
+typedef KGenericFactory<MotionAwayPreferences> MotionAwayPreferencesFactory;
+K_EXPORT_COMPONENT_FACTORY( kcm_kopete_motionaway, MotionAwayPreferencesFactory("kcm_kopete_motionaway"))
+
+MotionAwayPreferences::MotionAwayPreferences(QWidget *parent, const char* /*name*/, const QStringList &args)
+ : KCModule(MotionAwayPreferencesFactory::instance(), parent, args)
+{
+ // Add actuall widget generated from ui file.
+ ( new QVBoxLayout( this ) )->setAutoAdd( true );
+ preferencesDialog = new motionawayPrefsUI(this);
+ connect(preferencesDialog->BecomeAvailableWithActivity, SIGNAL(toggled(bool)), this, SLOT(slotWidgetModified()));
+ connect(preferencesDialog->AwayTimeout, SIGNAL(valueChanged(int)), this, SLOT(slotWidgetModified()));
+ connect(preferencesDialog->VideoDevice, SIGNAL(textChanged(const QString &)), this, SLOT(slotWidgetModified()));
+ load();
+}
+
+void MotionAwayPreferences::load()
+{
+ MotionAwayConfig::self()->readConfig();
+ preferencesDialog->AwayTimeout->setValue(MotionAwayConfig::self()->awayTimeout());
+ preferencesDialog->BecomeAvailableWithActivity->setChecked(MotionAwayConfig::self()->becomeAvailableWithActivity());
+ preferencesDialog->VideoDevice->setText(MotionAwayConfig::self()->videoDevice());
+ emit KCModule::changed(false);
+}
+
+void MotionAwayPreferences::slotWidgetModified()
+{
+ emit KCModule::changed(true);
+}
+
+void MotionAwayPreferences::save()
+{
+ MotionAwayConfig::self()->setAwayTimeout(preferencesDialog->AwayTimeout->value());
+ MotionAwayConfig::self()->setBecomeAvailableWithActivity(preferencesDialog->BecomeAvailableWithActivity->isChecked());
+ MotionAwayConfig::self()->setVideoDevice(preferencesDialog->VideoDevice->text());
+ MotionAwayConfig::self()->writeConfig();
+ emit KCModule::changed(false);
+}
+
+#include "motionawaypreferences.moc"
+
+// vim: set noet ts=4 sts=4 sw=4:
diff --git a/kopete/plugins/motionautoaway/motionawaypreferences.h b/kopete/plugins/motionautoaway/motionawaypreferences.h
new file mode 100644
index 00000000..43b33411
--- /dev/null
+++ b/kopete/plugins/motionautoaway/motionawaypreferences.h
@@ -0,0 +1,45 @@
+/*
+ Kopete Motion Detector Auto-Away plugin
+
+ Copyright (c) 2002-2004 by Duncan Mac-Vicar Prett <duncan@kde.org>
+
+ Kopete (c) 2002 by the Kopete developers <kopete-devel@kde.org>
+
+ *************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ *************************************************************************
+*/
+
+#ifndef MOTIONAWAYPREFERENCES_H
+#define MOTIONAWAYPREFERENCES_H
+
+#include "kcmodule.h"
+
+class motionawayPrefsUI;
+
+/**
+ * Preference widget for the Motion Away plugin
+ * @author Duncan Mac-Vicar P.
+ */
+class MotionAwayPreferences : public KCModule
+{
+ Q_OBJECT
+public:
+ MotionAwayPreferences(QWidget *parent = 0, const char *name = 0, const QStringList &args = QStringList());
+ virtual void save();
+ virtual void load();
+
+private:
+ motionawayPrefsUI *preferencesDialog;
+private slots:
+ void slotWidgetModified();
+};
+
+#endif
+
+// vim: set noet ts=4 sts=4 sw=4:
diff --git a/kopete/plugins/motionautoaway/motionawayprefs.ui b/kopete/plugins/motionautoaway/motionawayprefs.ui
new file mode 100644
index 00000000..134f939a
--- /dev/null
+++ b/kopete/plugins/motionautoaway/motionawayprefs.ui
@@ -0,0 +1,297 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>motionawayPrefsUI</class>
+<author>Duncan Mac-Vicar P.</author>
+<widget class="QWidget">
+ <property name="name">
+ <cstring>motionawayPrefsUI</cstring>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>411</width>
+ <height>406</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy>
+ <hsizetype>1</hsizetype>
+ <vsizetype>1</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel1</cstring>
+ </property>
+ <property name="text">
+ <string>&lt;p&gt;Motion Auto-Away can set you to be away automatically when it does not detect motion from your webcam or any video4linux device.&lt;/p&gt; &lt;p&gt;It will put you online again when it detects you moving in front of the camera.&lt;/p&gt;</string>
+ </property>
+ </widget>
+ <widget class="Line">
+ <property name="name">
+ <cstring>line1</cstring>
+ </property>
+ <property name="frameShape">
+ <enum>HLine</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>Sunken</enum>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox2</cstring>
+ </property>
+ <property name="title">
+ <string>Video Settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout21</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2_2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Video4Linux device:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>VideoDevice</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>95</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ <widget class="KLineEdit">
+ <property name="name">
+ <cstring>VideoDevice</cstring>
+ </property>
+ <property name="text">
+ <string>/dev/video0</string>
+ </property>
+ </widget>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer21</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <widget class="QGroupBox">
+ <property name="name">
+ <cstring>groupBox1</cstring>
+ </property>
+ <property name="title">
+ <string>Away Settings</string>
+ </property>
+ <vbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout5</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QCheckBox">
+ <property name="name">
+ <cstring>BecomeAvailableWithActivity</cstring>
+ </property>
+ <property name="text">
+ <string>Become available when &amp;detecting activity again</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer5</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>30</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout6</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>TextLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>&amp;Become away after this many minutes of inactivity:</string>
+ </property>
+ <property name="buddy" stdset="0">
+ <cstring>AwayTimeout</cstring>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer4</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <widget class="QLayoutWidget">
+ <property name="name">
+ <cstring>layout16</cstring>
+ </property>
+ <hbox>
+ <property name="name">
+ <cstring>unnamed</cstring>
+ </property>
+ <widget class="KIntNumInput">
+ <property name="name">
+ <cstring>AwayTimeout</cstring>
+ </property>
+ </widget>
+ <widget class="QLabel">
+ <property name="name">
+ <cstring>textLabel2</cstring>
+ </property>
+ <property name="text">
+ <string>minutes</string>
+ </property>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer3</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Expanding</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>180</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </hbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>spacer22</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+ </widget>
+ <spacer>
+ <property name="name">
+ <cstring>Spacer2</cstring>
+ </property>
+ <property name="orientation">
+ <enum>Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>Fixed</enum>
+ </property>
+ <property name="sizeHint">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </vbox>
+</widget>
+<layoutdefaults spacing="6" margin="11"/>
+<includehints>
+ <includehint>klineedit.h</includehint>
+ <includehint>knuminput.h</includehint>
+ <includehint>knuminput.h</includehint>
+</includehints>
+</UI>