pax_global_header00006660000000000000000000000064146636551700014527gustar00rootroot0000000000000052 comment=d1a51ae25a4ff139eb6d5b670e7b2a1c133c5945 gwakeonlan-0.8.6/000077500000000000000000000000001466365517000136705ustar00rootroot00000000000000gwakeonlan-0.8.6/.circleci/000077500000000000000000000000001466365517000155235ustar00rootroot00000000000000gwakeonlan-0.8.6/.circleci/config.yml000066400000000000000000000033201466365517000175110ustar00rootroot00000000000000version: 2.1 orbs: # The python orb contains a set of prepackaged CircleCI configuration you can # use repeatedly in your configuration files # Orb commands and jobs help you with common scripting around a language/tool, # so you don't have to copy and paste it everywhere. # See the orb documentation here: https://circleci.com/developer/orbs/orb/circleci/python python: circleci/python@1.2 jobs: build: docker: - image: cimg/python:3.9.5 working_directory: ~/repo steps: - checkout - run: name: Install dependencies command: | sudo apt-get update # Dependencies for installation sudo apt-get install gettext # Dependencies for execution sudo apt-get install gir1.2-gtk-3.0 gobject-introspection libcairo2-dev libgirepository1.0-dev python3-gi - run: name: Install Python packages command: | python3 -m pip install --upgrade pip python3 -m venv venv . venv/bin/activate pip install -r requirements_ci.txt - run: name: Compile command: | python -m compileall gwakeonlan gwakeonlan.py setup.py - run: name: Lint with flake8 command: | . venv/bin/activate python -m flake8 gwakeonlan gwakeonlan.py setup.py python setup.py install --optimize=1 --root=build ls -laR . - run: name: Install command: | . venv/bin/activate python setup.py install --optimize=1 --root=build ls -laR . - run: name: Show results command: | ls -laR . gwakeonlan-0.8.6/.github/000077500000000000000000000000001466365517000152305ustar00rootroot00000000000000gwakeonlan-0.8.6/.github/workflows/000077500000000000000000000000001466365517000172655ustar00rootroot00000000000000gwakeonlan-0.8.6/.github/workflows/python-3.10.yml000066400000000000000000000023121466365517000217060ustar00rootroot00000000000000name: Python 3.10 on: push: branches: [ "master" ] pull_request: branches: [ "master" ] permissions: contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.10" - name: Install dependencies run: | sudo apt-get update # Dependencies for installation sudo apt-get install gettext # Dependencies for execution sudo apt-get install gir1.2-gtk-3.0 gobject-introspection libcairo2-dev libgirepository1.0-dev python3-gi - name: Install Python packages run: | python -m pip install --upgrade pip python -m venv venv . venv/bin/activate pip install -r requirements_ci.txt - name: Compile run: | python -m compileall gwakeonlan gwakeonlan.py setup.py - name: Lint with flake8 run: | . venv/bin/activate python -m flake8 gwakeonlan gwakeonlan.py setup.py - name: Install run: | . venv/bin/activate python setup.py install --optimize=1 --root=build - name: Show results run: | ls -laR . gwakeonlan-0.8.6/.github/workflows/python-3.11.yml000066400000000000000000000023121466365517000217070ustar00rootroot00000000000000name: Python 3.11 on: push: branches: [ "master" ] pull_request: branches: [ "master" ] permissions: contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.11" - name: Install dependencies run: | sudo apt-get update # Dependencies for installation sudo apt-get install gettext # Dependencies for execution sudo apt-get install gir1.2-gtk-3.0 gobject-introspection libcairo2-dev libgirepository1.0-dev python3-gi - name: Install Python packages run: | python -m pip install --upgrade pip python -m venv venv . venv/bin/activate pip install -r requirements_ci.txt - name: Compile run: | python -m compileall gwakeonlan gwakeonlan.py setup.py - name: Lint with flake8 run: | . venv/bin/activate python -m flake8 gwakeonlan gwakeonlan.py setup.py - name: Install run: | . venv/bin/activate python setup.py install --optimize=1 --root=build - name: Show results run: | ls -laR . gwakeonlan-0.8.6/.github/workflows/python-3.12.yml000066400000000000000000000023121466365517000217100ustar00rootroot00000000000000name: Python 3.12 on: push: branches: [ "master" ] pull_request: branches: [ "master" ] permissions: contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.12" - name: Install dependencies run: | sudo apt-get update # Dependencies for installation sudo apt-get install gettext # Dependencies for execution sudo apt-get install gir1.2-gtk-3.0 gobject-introspection libcairo2-dev libgirepository1.0-dev python3-gi - name: Install Python packages run: | python -m pip install --upgrade pip python -m venv venv . venv/bin/activate pip install -r requirements_ci.txt - name: Compile run: | python -m compileall gwakeonlan gwakeonlan.py setup.py - name: Lint with flake8 run: | . venv/bin/activate python -m flake8 gwakeonlan gwakeonlan.py setup.py - name: Install run: | . venv/bin/activate python setup.py install --optimize=1 --root=build - name: Show results run: | ls -laR . gwakeonlan-0.8.6/.github/workflows/python-3.8.yml000066400000000000000000000023101466365517000216330ustar00rootroot00000000000000name: Python 3.8 on: push: branches: [ "master" ] pull_request: branches: [ "master" ] permissions: contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.8" - name: Install dependencies run: | sudo apt-get update # Dependencies for installation sudo apt-get install gettext # Dependencies for execution sudo apt-get install gir1.2-gtk-3.0 gobject-introspection libcairo2-dev libgirepository1.0-dev python3-gi - name: Install Python packages run: | python -m pip install --upgrade pip python -m venv venv . venv/bin/activate pip install -r requirements_ci.txt - name: Compile run: | python -m compileall gwakeonlan gwakeonlan.py setup.py - name: Lint with flake8 run: | . venv/bin/activate python -m flake8 gwakeonlan gwakeonlan.py setup.py - name: Install run: | . venv/bin/activate python setup.py install --optimize=1 --root=build - name: Show results run: | ls -laR . gwakeonlan-0.8.6/.github/workflows/python-3.9.yml000066400000000000000000000023101466365517000216340ustar00rootroot00000000000000name: Python 3.9 on: push: branches: [ "master" ] pull_request: branches: [ "master" ] permissions: contents: read jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.9" - name: Install dependencies run: | sudo apt-get update # Dependencies for installation sudo apt-get install gettext # Dependencies for execution sudo apt-get install gir1.2-gtk-3.0 gobject-introspection libcairo2-dev libgirepository1.0-dev python3-gi - name: Install Python packages run: | python -m pip install --upgrade pip python -m venv venv . venv/bin/activate pip install -r requirements_ci.txt - name: Compile run: | python -m compileall gwakeonlan gwakeonlan.py setup.py - name: Lint with flake8 run: | . venv/bin/activate python -m flake8 gwakeonlan gwakeonlan.py setup.py - name: Install run: | . venv/bin/activate python setup.py install --optimize=1 --root=build - name: Show results run: | ls -laR . gwakeonlan-0.8.6/.gitignore000066400000000000000000000004101466365517000156530ustar00rootroot00000000000000# Ignore Python compiled files *.pyc __pycache__/ # Ignore build and dist folders for PyPI /build/ /dist/ /*.egg-info/ # Ignore compiled translation files /locale/ # Ignore backup files *.ui~ *.glade~ \#*.glade# \#*.ui# # Ignore PyCharm project folder /.idea/ gwakeonlan-0.8.6/.tx/000077500000000000000000000000001466365517000144015ustar00rootroot00000000000000gwakeonlan-0.8.6/.tx/config000066400000000000000000000004321466365517000155700ustar00rootroot00000000000000[main] host = https://www.transifex.com [o:muflone:p:gwakeonlan:r:gwakeonlanpot] file_filter = po/.po source_file = po/gwakeonlan.pot source_lang = en type = PO replace_edited_strings = false keep_translations = false gwakeonlan-0.8.6/AppImageBuilder.yml000066400000000000000000000177301466365517000174150ustar00rootroot00000000000000version: 1 script: # Install dependencies - apt-get update - apt-get install --yes gettext python3 python3-gi python3-xdg gir1.2-gtk-3.0 # Remove any previous build - rm -rf AppDir root | true # Compile the package - python3 setup.py install --root root # Copy the python application code into the AppDir - install -m 755 -d AppDir/usr/share/gwakeonlan - cp gwakeonlan.py AppDir/usr/share/gwakeonlan - cp -r root/usr/local/lib/python3.6/dist-packages/gwakeonlan AppDir/usr/share/gwakeonlan - cp -r root/usr/local/share/gwakeonlan/ui AppDir/usr/share/gwakeonlan - cp -r root/usr/local/share/gwakeonlan/data AppDir/usr/share/gwakeonlan - cp -r root/usr/local/share/locale AppDir/usr/share - mkdir -p AppDir/usr/share/doc - cp -r root/usr/local/share/doc/gwakeonlan AppDir/usr/share/doc # Copy icon - install -m 755 -d AppDir/usr/share/icons/hicolor/scalable/apps/ - install -m 644 -t AppDir/usr/share/icons/hicolor/scalable/apps/ icons/scalable/gwakeonlan.svg AppDir: path: ./AppDir app_info: id: com.muflone.gwakeonlan name: gwakeonlan icon: gwakeonlan version: 0.8.6 exec: usr/bin/python3 exec_args: "$APPDIR/usr/share/gwakeonlan/gwakeonlan.py $@" apt: arch: amd64 sources: - sourceline: 'deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ focal main restricted universe multiverse' key_url: 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3b4fe6acc0b21f32' include: - python3 - python3-gi - python3-xdg - gir1.2-gtk-3.0 # Language packs for translating the GTK+ widgets - language-pack-gnome-af-base - language-pack-gnome-am-base - language-pack-gnome-an-base - language-pack-gnome-ar-base - language-pack-gnome-as-base - language-pack-gnome-ast-base - language-pack-gnome-az-base - language-pack-gnome-be-base - language-pack-gnome-bg-base - language-pack-gnome-bn-base - language-pack-gnome-br-base - language-pack-gnome-bs-base - language-pack-gnome-ca-base - language-pack-gnome-ckb-base - language-pack-gnome-crh-base - language-pack-gnome-cs-base - language-pack-gnome-cy-base - language-pack-gnome-da-base - language-pack-gnome-de-base - language-pack-gnome-dz-base - language-pack-gnome-el-base - language-pack-gnome-en-base - language-pack-gnome-eo-base - language-pack-gnome-es-base - language-pack-gnome-et-base - language-pack-gnome-eu-base - language-pack-gnome-fa-base - language-pack-gnome-fi-base - language-pack-gnome-fr-base - language-pack-gnome-fur-base - language-pack-gnome-ga-base - language-pack-gnome-gd-base - language-pack-gnome-gl-base - language-pack-gnome-gu-base - language-pack-gnome-he-base - language-pack-gnome-hi-base - language-pack-gnome-hr-base - language-pack-gnome-hu-base - language-pack-gnome-ia-base - language-pack-gnome-id-base - language-pack-gnome-is-base - language-pack-gnome-it-base - language-pack-gnome-ja-base - language-pack-gnome-ka-base - language-pack-gnome-kk-base - language-pack-gnome-km-base - language-pack-gnome-kn-base - language-pack-gnome-ko-base - language-pack-gnome-ku-base - language-pack-gnome-lt-base - language-pack-gnome-lv-base - language-pack-gnome-mk-base - language-pack-gnome-ml-base - language-pack-gnome-mr-base - language-pack-gnome-ms-base - language-pack-gnome-my-base - language-pack-gnome-nb-base - language-pack-gnome-nds-base - language-pack-gnome-ne-base - language-pack-gnome-nl-base - language-pack-gnome-nn-base - language-pack-gnome-oc-base - language-pack-gnome-or-base - language-pack-gnome-pa-base - language-pack-gnome-pl-base - language-pack-gnome-pt-base - language-pack-gnome-ro-base - language-pack-gnome-ru-base - language-pack-gnome-si-base - language-pack-gnome-sk-base - language-pack-gnome-sl-base - language-pack-gnome-sq-base - language-pack-gnome-sr-base - language-pack-gnome-sv-base - language-pack-gnome-szl-base - language-pack-gnome-ta-base - language-pack-gnome-te-base - language-pack-gnome-tg-base - language-pack-gnome-th-base - language-pack-gnome-tr-base - language-pack-gnome-ug-base - language-pack-gnome-uk-base - language-pack-gnome-vi-base - language-pack-gnome-xh-base - language-pack-gnome-zh-hans-base - language-pack-gnome-zh-hant-base exclude: - humanity-icon-theme - ubuntu-mono files: exclude: - usr/share/doc/dbus-* - usr/share/doc/dconf-* - usr/share/doc/gir1.2-* - usr/share/doc/glib-* - usr/share/doc/gsettings-desktop-schemas - usr/share/doc/hicolor-icon-theme - usr/share/doc/language-pack-* - usr/share/doc/lib* - usr/share/doc/mime-support - usr/share/doc/python3* - usr/share/doc/readline-common - usr/share/doc/tzdata - usr/share/doc/xkb-data - usr/share/gnome - usr/share/help-langpack - usr/share/i18n - usr/share/man - usr/share/libthai - usr/share/X11 - usr/share/zoneinfo - usr/share/zoneinfo-icu before_bundle: - echo 'Before bundle' - echo '#!/bin/bash' > before_bundle.sh - "bash before_bundle.sh ${APPDIR}" after_bundle: - echo 'After bundle' # Copy GTK+ translations to AppDir - echo '#!/bin/bash' > after_bundle.sh - echo 'set -e' >> after_bundle.sh - echo 'APPDIR="$1"' >> after_bundle.sh - echo 'pushd "$APPDIR/usr/share/locale-langpack"' >> after_bundle.sh - echo 'for locale in *' >> after_bundle.sh - echo ' do' >> after_bundle.sh - echo ' LOCALEDIR="usr/share/locale/$locale/LC_MESSAGES"' >> after_bundle.sh - echo ' if [ ! -d "$APPDIR/$LOCALEDIR" ]' >> after_bundle.sh - echo ' then' >> after_bundle.sh - echo ' mkdir -p "$APPDIR/$LOCALEDIR"' >> after_bundle.sh - echo ' fi' >> after_bundle.sh - echo ' if [ -f "$locale/LC_MESSAGES/gtk30.mo" ]' >> after_bundle.sh - echo ' then' >> after_bundle.sh - echo ' cp $locale/LC_MESSAGES/gtk30.mo $APPDIR/$LOCALEDIR' >> after_bundle.sh - echo ' fi' >> after_bundle.sh - echo ' done' >> after_bundle.sh - echo 'exit 0' >> after_bundle.sh - "bash after_bundle.sh ${APPDIR}" # Remove every other translation - "rm -rf ${APPDIR}/usr/share/locale-langpack" before_runtime: - echo 'Before runtime' - echo '#!/bin/bash' > before_runtime.sh - "bash before_runtime.sh ${APPDIR}" after_runtime: - echo 'After runtime' - echo '#!/bin/bash' > after_runtime.sh - "bash after_runtime.sh ${APPDIR}" runtime: env: PATH: '${APPDIR}/usr/local/bin:${PATH}' APPDIR_LIBRARY_PATH: '$APPDIR/usr/lib/x86_64-linux-gnu:$APPDIR/lib/x86_64-linux-gnu:$APPDIR/usr/lib:$APPDIR/usr/lib/x86_64-linux-gnu/gdk-pixbuf-2.0/2.10.0/loaders' PYTHONHOME: '${APPDIR}/usr' PYTHONPATH: '${APPDIR}/usr/lib/python3.8/site-packages' XDG_DATA_DIRS: '/usr/local/share:/usr/share' AppImage: update-information: None sign-key: None arch: x86_64 gwakeonlan-0.8.6/README.md000066400000000000000000000051511466365517000151510ustar00rootroot00000000000000# gWakeOnLAN [![CircleCI Build Status](https://img.shields.io/circleci/project/github/muflone/gwakeonlan/master.svg)](https://circleci.com/gh/muflone/gwakeonlan) [![Python 3.8](https://github.com/muflone/gwakeonlan/actions/workflows/python-3.8.yml/badge.svg)](https://github.com/muflone/gwakeonlan/actions/workflows/python-3.8.yml) [![Python 3.9](https://github.com/muflone/gwakeonlan/actions/workflows/python-3.9.yml/badge.svg)](https://github.com/muflone/gwakeonlan/actions/workflows/python-3.9.yml) [![Python 3.10](https://github.com/muflone/gwakeonlan/actions/workflows/python-3.10.yml/badge.svg)](https://github.com/muflone/gwakeonlan/actions/workflows/python-3.10.yml) [![Python 3.11](https://github.com/muflone/gwakeonlan/actions/workflows/python-3.11.yml/badge.svg)](https://github.com/muflone/gwakeonlan/actions/workflows/python-3.11.yml) [![Python 3.12](https://github.com/muflone/gwakeonlan/actions/workflows/python-3.12.yml/badge.svg)](https://github.com/muflone/gwakeonlan/actions/workflows/python-3.12.yml) **Description:** Wake up your machines using Wake on LAN **Copyright:** 2009-2024 Fabio Castelli (Muflone) **License:** GPL-3+ **Source code:** https://github.com/muflone/gwakeonlan/ **Documentation:** http://www.muflone.com/gwakeonlan/ **Translations:** https://explore.transifex.com/muflone/gwakeonlan/ # Description From the *gWakeOnLAN* main window you can define your hosts along with their MAC Addresses, select those you want to turn on and just start them with a simple click on the button **Turn on**. ![Main window](http://www.muflone.com/resources/gwakeonlan/archive/latest/english/main.png) For each host you can define its name, the MAC address and you can choose to turn it on on the local network or via internet through a destination host. ![Detail](http://www.muflone.com/resources/gwakeonlan/archive/latest/english/detail.png) # System Requirements * Python >= 3.6 (developed and tested for Python 3.9 and 3.10) * XDG library for Python 3 ( https://pypi.org/project/pyxdg/ ) * GTK+ 3.0 libraries for Python 3 * GObject libraries for Python 3 ( https://pypi.org/project/PyGObject/ ) # Installation A distutils installation script is available to install from the sources. To install in your system please use: cd /path/to/folder python3 setup.py install To install the files in another path instead of the standard /usr prefix use: cd /path/to/folder python3 setup.py install --root NEW_PATH # Usage If the application is not installed please use: cd /path/to/folder python3 gwakeonlan.py If the application was installed simply use the gwakeonlan command. gwakeonlan-0.8.6/data/000077500000000000000000000000001466365517000146015ustar00rootroot00000000000000gwakeonlan-0.8.6/data/com.muflone.gwakeonlan.metainfo.xml000066400000000000000000000025611466365517000234770ustar00rootroot00000000000000 com.muflone.gwakeonlan gWakeOnLAN Wake up your machines using Wake on LAN

A free GTK+ application to awake your machines using Wake on LAN

FSFAP GPL-3.0-or-later Network https://github.com/muflone/gwakeonlan/ http://www.muflone.com/gwakeonlan/ https://explore.transifex.com/muflone/gwakeonlan/ https://github.com/muflone/gwakeonlan/issues/ http://www.muflone.com/contacts/ gwakeonlan.desktop http://www.muflone.com/resources/gwakeonlan/archive/latest/english/main.png http://www.muflone.com/resources/gwakeonlan/archive/latest/english/detail.png http://www.muflone.com/resources/gwakeonlan/archive/latest/english/about.png
gwakeonlan-0.8.6/data/gwakeonlan.desktop000077500000000000000000000034321466365517000203270ustar00rootroot00000000000000[Desktop Entry] Version=1.0 Encoding=UTF-8 Type=Application Name=gWakeOnLAN GenericName=gWakeOnLAN Comment=A GTK+ utility to awake turned off computers through the Wake on LAN feature Comment[bg]=GTK+ приложение за събуждане на изключени компютри чрез функцията „Wake on LAN“ Comment[de]=Ein GTK+-Werkzeug, welches ausgeschaltete Rechner durch Wake on LAN (WOL) anschalten kann Comment[en]=A GTK+ utility to awake turned off computers through the Wake on LAN feature Comment[es]=Una aplicación GTK+ para encender equipos apagados a través de Wake on LAN Comment[eu]=Itzalitako ordenagailuak Wake on LAN bidez pizteko GTK+ tresna Comment[fr]=Un outil GTK+ pour réveiller les ordinateurs éteints grâce à la caractéristique Wake On LAN Comment[he]=כלי עזר +GTK כדי להעיר מחשבים כבויים דרך תכונת Wake on LAN Comment[it]=Un'utilità GTK+ per risvegliare computer spenti attraverso la caratteristica Wake On LAN Comment[nl]=Een GTK+ toepassing om uitgeschakelde computers aan te zetten door middel van de Wake on LAN functie Comment[pl]=Narzędzie GTK+ do budzenia wyłączonych komputerów techniką Wake on LAN Comment[pt_BR]=Um utilitário GTK + para ligar e desligar computadores através do recurso Wake on LAN Comment[ru]=Утилита для включения компьютера посредством функции \"Wake on LAN\" Comment[sk]=GTK+ utilita na prebudenie vypnutých počítačov pomocou Wake on LAN Comment[sl_SI]=Pripomoček za GTK+ za zbujanje izklopljenih računalnikov s pomočjo zmožnosti Wake on LAN Comment[tr]=Wake on LAN özelliğini kullanılarak bilgisayarları açmak için bir GTK+ uygulaması Terminal=false Categories=Network;GTK; Icon=gwakeonlan TryExec=gwakeonlan Exec=gwakeonlan gwakeonlan-0.8.6/data/gwakeonlan.png000066400000000000000000000101111466365517000174270ustar00rootroot00000000000000PNG  IHDR00WbKGD pHYs{tIME  ezIDATh͙[]Wyk_>vĎqQڪMKJQ%J[ZPԪH%)Pڇ PE -Pr3$Şx<ϙ9g}Z}ǎةiZemW>ĩl6svjs/Lɴ Z^ͥoz/:cm0i_2MD$T~CLҐH$z2w2ħ>eWZH9?95V}̹K^Do\XXi6CVk/\߾`@|3Oqs@[!JK"׶v=PB2O4La'ڪS?rhcmӏ׾m$?m?aY`1 shE=^\ZL#~$'kb[o0 ÝG.=o2b;jƭeRD.\\X t̓_ٶUjʰl,vVy?.~8[,"\^\c/d]ZZe\|s3āt:C39VZoO<ٻn<7`0bZa``  ڱL-*"uy SƊei BƑ0@w`a6/w{3!wd?>q[%Ġ{㾠׌T\yd@iǀI T7MN49q <mlϫ!2cK\nce"cMD,HFǧE&4ةdBl Uc-Xʀfk;#G2;}轼ʿ0xIlS '"I[@:=D{r1JtzzKUV*ζ/[w@[; :LhAp "B Xn"U @)yw@JK!X[P5jQ\wVۡY[b}eeq>frOwI^8u3ꬮo05AٳuE3WYր@h_wkoD!vqnR*1czr /Q)UɁ]KPJQ*ROrp(;9,Rxbgw[ dmBQ8DR/^l}x|VE*"8;_gLkV{3|Yo n`ssQodqmj( $JʫnU\Bl4QJII濾g63i G&vj]2pRIom/vjɔ)縼x%R]J @ʈd"o=gOgI_F#ht"7Vy"h)܄J9(B2f*?:um[ƛ9#$n`H ^4͕)&FG㰴$i062:lmoR.i$i0Zk05+89a̓NeجW%%RJ,|0FH=w{8v4'+s='Lir$8?CT9q8#k}4cS-.3=g|_mj V 0 /tJI0-&8-|M 0$)'xc-2Ҡ]B I\XZW^-dU6M<ۤ P:^M.[٪3<4FޤA9 ƭ5 ,#d\If#dteHw0LI*Lk>O:؉M,;tGS|?"URZMw?i} ĚMLH+P'd!nE}b%@yuR,b;ЫSHM7_iEyr%#=J%ZL9yx@R^hPHݜ)!\9 1C&7\]eG)(=M1?0~͔E%lcؖRFsN}$+T I ø5 Rmaf0!l BH.SFkf1Lgo\6%R$kMȤs{חWX9&MpZ % (>B1|9)[{Eq>nFW`qiMp`rE0dfv5ssGbscH$*PٮZ<{xxeE@P.UX\ZGY[[eѠRN2DM.\*D|> "סݩi.2 nXlۓogz2vb.UR="QA78ue_]A=78U6Aa"{=쑊vfs'sk.ӕ;vCgspq3pbZ8~ĕMx0;fHF~h~qBGitNs`KUv]&& <FF\G5K RXL&7IhiILӠTqqXbBnaڭjtŝ_~QgF-!L%mK:-&G5P?.25尾aR23d}է'8|$eZ {4P*k˝n0Q3|tpЯ fl"аE5)m'G"09!LtBѠՌOd0 B!dfCL9LMR(XOLBC !rQ.e"fLL$`468xWAm[35et"TJ29vf!<i64^"lBryM,knB mC$q$V%NSx^<贒8v v±4L:Iz(& Sxդ>!<܁2^'ov SeiXI%|QP!4 Bd&ϱvDmse }"mI }f/eQ ν'dnQ+P7iyPK_ 0nQ|V}ػSqERk~s3{ߌ~Z#@NM[޲ 0ÐN>|_)u\/u~nd&>o3k7^A~?=0Zkur%%_1IENDB`gwakeonlan-0.8.6/data/icons/000077500000000000000000000000001466365517000157145ustar00rootroot00000000000000gwakeonlan-0.8.6/data/icons/computer.png000066400000000000000000000464051466365517000202710ustar00rootroot00000000000000PNG  IHDRHHUG(CzTXtRaw profile type exifxڥir;c ,YߟIx_ULa1m'gB%Քk|( '|ܳ߯KZuYT{Q[~Q?Z-ywoطvZ.ua_sћzs[o9[OlyLW[8}hׇYiGAN?nlq~ǾVvɮ}{}L/ZH uz;ѕ:UbhZz2"E3auk`mvu~;hbp˸bU7~1{-T[aNmQg) _߾\ڧ|rNM3d9cXwP?Ȯ F\2ѣ`A[CDՑX& \,tX&tmSռyEeu KD|67B?90Ԣ!Ƙb%ؒO!ŔRN"Ŗ}&ǜr%܊/ĒJ.ҪҌ5\K5lx@kuC{鵷|FqGu馟L32l.Š+ʪmaǝve>k5w,ոGVte3 FX<fO!8YN6{+Q6VÂaYqעn&ovs32iզ8^A}<3mmK{?}R`u!?&#b7t# ߀;Ů"Z;?.=[g@]4ײr l T=t#||u?1g2ad0ƠS7se.RxځTF}B43ofz!ww{gV~./ӧ{TTaKau8?mʺn &?5l΀:|x/u?Je1ͽ/J|I}SOЍQұI˼^?c~&&ҫy iAa63h5lŰt*vҠ>Etk:Ḫ$nYO޾~]PyECs)*]Uͺq!Nu5d`gֈ3N [Z_*(˫(n~޸ukq僄3lhJgb0Pȯ0QSY=L|69_a>:bT|lk|-,4qYPI'he:}{%Kie&Ǵ}t@]Nmd~v'>E,̘qD^0Ecڸm6tfd3LCTuƵϩ7D!S!2,n2oYQ,fФin׎LHv GkUNs B݋iHäs۔R?A4N ʿDW indtӢWx:O< 6Q&/#ĸׄvȌD]VdÌ>[OM %-Kv `!key\c~ DEUK<^n#wXI3|foaC:> w{`5n16u$%m8RwĞBWlTkõ-~?o1s}c'm,>iJ撄e 1bh"B|ѝrng]44>b>d85@C5k7M-/;pWJFKbo5 uTɣf6_#`o8j^W9tQ~ˀ W/ @lIL/-^yN~ŽI$$ $ipyYsmLߡ{ԗuãҼ5a@ AYU] k4%vh@7~ R8;$'`ͨ䢀 tt6 ՚K6 #," "dkN۵1bz;El pa*4 @jJ Hu:LȊ2'܉>ȾbY3/l#B, a})z? RyTm5a>tXDPŅ}ujxG"Ew#EA?ruZj;CyםS 6  0.}*W{D[l.2.Z>%MI 8GQ  :S hZaFvVnd Lt!>8 $Es(r(yQKЊkՂY<>r0e`y1`*IQ;.N[ P?z2J?PH<,PIrܿ0"3Є]@=^*WBW|̛(G7AЈn!UL y=?%@'cpdI93!ZNDMYM(U"2k!+;!g i^5}sBd51$/7s,?&TG#C'E;[ bz5P/X{g-;"5L1"*{aGw#x:h12/\0p?_L|Nv>'f=tb Y$C*@P^, '@!rSuy_"@A+Rqr!?j7qi|UJO=Aeɠ">~1:s#6IWWLz&‰(]y6zy&>8^}DDD ;]b1%u+T$pCĝK) 'tB14s7ցP"ӓ%(UZZ΅4e}E/gny8i{e9Qɂ˗+| e~Gʇ hnX?J3ӞMZ?ygq/,1q\EԐHMGݮK_ hqbJ($ ikz ujoӷunv8#2d>4ZeIO軩1B_ -.~$Pe;5quN.)2g <Ћ%ՀHvh+_(p$eͥշ(#rPy ;ez!:Jb0gm@0;6wiu`H6"7vu&ng B(+!PTt~y"%P(!ZѢ \z5R `yZ^1a,r0y-  $D]N]5Ӯ'c#pUP rwǺ7\o'ddu;ӏ5c1Gq./;}.BGGW*YwN4Ȑϝ_v|勌2x0U'43Ip{j[ۖ+@͜1uEzW"@C[p~5mDX7Ί#n@ʀO2oU'CSj"(U-Ê.dKE),~QVEv8rҼlY鶄jI갣◄,*~2PR'\ڇ&\7,iq7i]#)}Me92-Vhʼn IpuX_/|z%(AJd+Zv+B]|MD&[ѷ,sihVە"Dy;Rq CUy T(_yҜkٽ `V`^~Xƻh(DQ 9Cl' ^rc%3mD+l{zI 'd8yg;Vɹ4 Nԏvf[6E"̙~vFDI2EqUN:bްPwZClpPJ pȠ"k7Ԉ8lu-ܨ1z6MVx<&&lF wS 4YjXzQ5Hux8 дwKO1UY\$i$R?-B!)~bqKQq*+(xJnš?hXICAA53C}D4W%:Vq&ZΘwmGjudAPD8$Xls% fWQzr厊JfܺO9:SSK0fZMi4)r^.GtP"h-BEB_)}ܳTVj6bř4[ѹ59H:Q2A$C, 9 j#jj5=6uS> XWtb\z0&R"߯g' SwRъB"3/6=vD-`rC P@5  "9'="S5A)PFΏئY(THqj&8pϾ˘쭉 Fo=Sͩ6{CtT ZCAzIPHy'i &h6D7ui:~;K`CqB.%R)/.ܝ,}y*(O WE{O+ͻLf!Jة242p4)CWG׆qq֔y&VS@^Nz3V͑-uE5t\X`F~ս'|#B[QI#ꯘS'2)jW/z%_> #մb! o %RigFwFFH2$YERan\GǴthO$ @Ƶi)I"kS5w`zd@ $ +7(7_a+EzLN:B%&μOZpuZ84 t=|pT z4kthhMB RtD#o%cn*T/~_~߼$dZHjj8 !`%g}|]} Q*\Bhcr1=AvݣhdVD|F0JYèG&t N{U&Tt6V$] kcY/)o9'/VYQ 4 UvMH;"dpf GYxokejOU44)i>±JJu#tѤDC1i@j4fhϯѦ짂C\0 Vխ)T};ܑzIhuVcs&=Ύ,9(<:jdj%]£-"|i\\&3ڳf  fH3kީŻZ~ G1wP I ׾f[#LV4BAc4*;D.r6Wkʙ~Bp UC# Ve_NT88ܩYSˏR\kq,01h3U#N 7IiIx $2TǨІ֬z>YvRphˉc+jz )9v~Q><~5&򻈇*OP:㱱GڳV"w݇ ]κߛmo:F-l_9 /!=ep|2o*D8 M#"Ag +& Z$LE߹ە2\94Cͣq0@)j {,*iy޼Ns ,uhίF[xmXg"Q-GY osZe<&0:tB oچ{,imxvWHw\D"#4_ S.IoB2GbA%MZZyCj {jљ" 4;?2Q'ws6*u: $ p #úJޝn?ROECᜰtnWxf %iՎ9_, X't-i:"j iB/Hb;ϧ#k3y`#l?݂K N*Ҏ?Zuݒ4##pD^05.GO) @pS}9U=:q# @5bw N4w\@h!x GN;P̖F&p = -y #idDB`ILf =KLq:W! 5@v3l K#b$(JɁ2i,tYީ]$M"bt 䲊۳H(m86C}JhKCH>0Z`D]| `=oC %^ǝģALA 0d*ۍ#` S1#CP l<ivg7O5ց5A6V`2.Jj!)>8Ut)xAڦ5u!MA؄յHz|r|eY+<&kĥH.v/gGܘAl);7Y Y~}Bqm)mN'Y8]w@xq 㬚'(%:eι0n8` | 6%yDӗ~ :}N7-FX%EbQ_ SuH\4ׂX.CyVؑ#s+YYf? A͢aEesB֎sF 䢕1~ԞNτjQ@KG.At7.qŞ]I˹h2CJ%,1DtZYx()SIG fZ23ٌkώL†)jb{0藒.g+ D4,@4uj{fGHHކ;iNP|߀l_ BAkDŽ1v'5cumi"ҷZq#l`ڻ{][Ǿ.$Cב NR))j.npaZ%Q&Hi>V&}OEMM8r$6l857(8mgevSeZ"҉lFGˮo"gSK+aeA޳ڛ4g[[t,\ NPUGN 6*+Md) wLHi{?ٜpw}Nʙ(JWi笂(z gbHveٴ= M3V%աv8'ǐ9ISۙ9ҮJ*qJe~Wuq[ԠHđp4D͓ vZpPߎ[{BưQH@{}E4i" IO<$ڌux X4Oh^sf4yhFVӂsoH06gK8M!vlY)kgUAvra*MFDnq(k֖L-p阗\իIx{<>5}tWJrk/ctYa T-_kuwRf~#;Xw҈8(Yg 9~5?wr8t#@ S~"``n#I:>ΎiFVGBdcWy?3wV U~qVFt߻gT{wɋlLy2=.?kM ,9HсWӯ.7h_q4^GgvlcĂv{>9;u=1ߪ҇J_$KL"a@FJ $R6"AتL{B~B3E.^{G/Kx[Ӳ A,y- yeiH׶x&emcE6+q]hڷ> [+9J'2dHr8M=2dC:ځX֊-g nGT?~iCCPICC profilex}=H@_ӊ" 8dN/ EjVL.& IZpc⬫ ~8:9)HK -b<8ǻ{wP/3 nD\dWWF?eIRx?Ggaӛy8ŠJ|N]QscigJo+u`ZKuKS`ɐMٕ4|x?o}@[s@JH}ۿg\rov iTXtXML:com.adobe.xmp s;=gbKGD1~ٹ pHYs  tIME 5bwIDATx\i%Wuν_O/ˌm<,a?0"E Rl"CH,6Eq(?"B~%xXB pƓgg~^ޫ{[t7h"QMݪW]uwrO=Bsyۤ$e[|N -ifvRjq`/N6ʝG~\ r~heNA sa'h8-@^ȴդ N@*Ivi(i0u(mThYDզ=sZz;ߴUs_.Q>Y B?.^D h-}uL j% 0(h-T;G 8D{0Pe aAA @1Tr.",A A@^*#_"QD ((>km$@I.ɕ4Ĺ_~?'/YDPK%Tr^icGR(>'7!TA0 c~b$R@`0F JD/AШ٥GEuI%8\"F2 u(ʠ`|\ $S H)T|]aϸ Lq?,RB)T :OibORp\R+$ʆKʡ?p[? "mɳRrO[:bA!Df(_Dz$E`Ri!b]Xfu"&eIA2qIs떈6e \}(`̅`D τ4b-H mr2F-%pAI2I$ESĬ㜨\Y8a%(3 Bsh_)( =iR䞭R`Y&e%Eפ3 FF`a#u hf]s8C(EVIU+ 4\TIlߧ^/w1(ZT DNՊ  \ ]YX$ң@Ly~AtAVF *I8#bC 0<'f.zTR T(&UX(v )'g:Ni%F8`2RĬrN$,PwiJYUyvI%D$Ps 1(մrbR .(^!ngB}4*88 %sLZi <9qvNҙJhHÍdEP"H T!pC$ P7S>Q$hwf"80=:*K KGif[dS84ȃvT,.\x( (. T,kgX.fD|Ŭ 2q>i>ho~MʓIS\BmF󩎘Meʉ)^ $koĒ)TeV*&z\ƊubNf0?%7 IGT|I#UL y*RJ4$IE7r)M*`ܑd:Uxp!+VqLC1B0+{TiY *x?5Z8W(Xvb$bf^]aYJOHRQ!#;zȓUSƒD"y`x'#5UzWI{}L|Twqĺ$ihlHDmҬ"gfZŸv(fA UJcB_dºVCrGIʬ]'RYJ S$H۔pdw$K]VL2i#k`@"1prHQ; 0ԅbڑ~. ԫ i>\ֹ勏0*볮&˖*q6A%^u`ޫJT3`e'ɽo>,'RRPDMRu*ybnX}ߎk;ҔK &UqSpIU)ӤH;S) K-Y"v#I}tu0(W"0*r-*B䫴1b-XlZ:.jd@(-M噢#y8hd|ꪍIg*gZFexW4tMHC@#-ΔRBXS;!HNyBd!P*˖TO^rQ&3X+sqXkJY3vcI:aEkT ZȫUVmkkkvh4033`*45.yӭjPV. #JzNWQEFx"Rrw]EW/|ĉe]臘Z)W !(]s(@1MYLj~lưluVT1~@c;xGx<ŋEkypC/:庮gn|?hIW!q(ޤ'8#?􃇎G{OaHM MTdke=WyGȫv%@1 ԓO=nPvl?sxq~xVwy_|S4ӈ;9Ϝ/UFR K'; 6 @t^=gBHϧ9Ï=v`Ti:SuKr;=K*MU%UO{ה i,8)${7D/!qoR`Yv4M[~Ā2 CJ! È 8rx*)C?>n  F1H 9i@h6masg?ǟOx21ldsf~-G7\~ `{ @Wz]z- ; C9Ƥ"WvY~ dY5Ίgqv7Bӟx? ?Ϭnz=f!ҀedH3@1=W 47ߒ =@ &[@vm/}oK#Mdr(^UqQJV1l7q`u&1 МiNY dPa*hK^W+i{^& [k3Mz ^|BӅm8S9 0yFDx++h2LaElv:p]W!D@Eh6\2,FEj5Լlۆiu]FuS]jCulv;Xu/>qA2X-|l[Vu@ҐlvP7! Ngz\CٜA{]B:Zpmľ}Xrf3KZl5D)Qo@J4M4 vl̶fc.&:<σm٘CBE8xK\wݳ;#WO77KV@<[-9qWCۅyDϫ^}quF~emz]4179V20??9={̌oFi3p]-xjŋpFW~ 7bK[n:vh40- Q}HgYVpH;eYي,teYc"&"DQ~!bB8'Oģ7.= A/\'Nǟh4NVR a끙Qհ9lmm٨o~ǡm2M~y7mmm h4Vw a@ ?ru]0q! Ry5:LÄeYjPB9Ӵ`Hf4͘M4@ Hǐh7*w|2678n~PJ! !@'n3a&>|-wmN2mou$U/@Q:bL,B)|(~ר/^z?1HKp֐!p&kyx iş^T,,뮩TS.#>H~4eWIeΫ<ngfxBfffx79ūV78xNFWԙ3N^~l"Ha"RzgPn߹zIENDB`gwakeonlan-0.8.6/doc/000077500000000000000000000000001466365517000144355ustar00rootroot00000000000000gwakeonlan-0.8.6/doc/contributors000066400000000000000000000002461466365517000171170ustar00rootroot00000000000000Robin Schneider Tilka https://github.com/Tilka Torstein Husebø https://github.com/torstehu Seiichi "Suikan" Horie https://github.com/suikan4github gwakeonlan-0.8.6/doc/copyright000066400000000000000000001046411466365517000163760ustar00rootroot00000000000000Copyright 2009-2024 Fabio Castelli (Muflone) License: GPL-3+ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gwakeonlan-0.8.6/doc/license000066400000000000000000000011451466365517000160030ustar00rootroot00000000000000This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . gwakeonlan-0.8.6/doc/resources000066400000000000000000000004361466365517000163750ustar00rootroot00000000000000Project home page: http://www.muflone.com/gwakeonlan/ Source code: https://github.com/muflone/gwakeonlan/ Author information: http://www.muflone.com/ Issues and bugs tracking: https://github.com/muflone/gwakeonlan/issues/ Translations: https://explore.transifex.com/muflone/gwakeonlan/ gwakeonlan-0.8.6/doc/translators000066400000000000000000000032711466365517000167370ustar00rootroot00000000000000English: Fabio Castelli (Muflone) Italian: Fabio Castelli (Muflone) French: Emmanuel Enguerran P. Paul Mairo Albano Battistella Spanish: Matias Bellone Luca Della Ghezza Adolfo Jayme-Barrientos Russian: Сергей Богатов German: Martin Riemenschneider Ettore Atalan Robin Schneider martinum4 Slovak: Jozef Riha Jozef Gaal Dutch: Thomas De Rocker Heimen Stoffels Basque: Asier Iturralde Sarasola Hebrew: GenghisKhan Polish: bjfs Portuguese: ricardomourabraga Amilton Pereira Cavalcante Paguiar735 Slovenian: Andrej Mernik Turkish: Necdet Yücel Fatih Altun Bulgarian: sahwar Chinese: Cosmo Chene Catalan: Adolfo Jayme-Barrientos Korean: Ian Snyder Lithuanian: Moo gwakeonlan-0.8.6/gwakeonlan.py000077500000000000000000000016771466365517000164060ustar00rootroot00000000000000#!/usr/bin/env python3 ## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import gwakeonlan.main if __name__ == '__main__': gwakeonlan.main.main() gwakeonlan-0.8.6/gwakeonlan/000077500000000000000000000000001466365517000160165ustar00rootroot00000000000000gwakeonlan-0.8.6/gwakeonlan/__init__.py000066400000000000000000000015301466365517000201260ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## gwakeonlan-0.8.6/gwakeonlan/app.py000066400000000000000000000031611466365517000171510ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## from gi.repository import Gtk from gwakeonlan.constants import APP_ID from gwakeonlan.ui.main import UIMain class Application(Gtk.Application): def __init__(self, options): """Prepare the GtkApplication""" super(self.__class__, self).__init__(application_id=APP_ID) self.options = options self.ui = None self.connect('activate', self.activate) self.connect('startup', self.startup) # noinspection PyUnusedLocal def startup(self, application): """Configure the application during the startup""" self.ui = UIMain(application=self, options=self.options) # noinspection PyMethodOverriding def activate(self, application): """Execute the application""" self.ui.run() gwakeonlan-0.8.6/gwakeonlan/command_line_options.py000066400000000000000000000060761466365517000226010ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import argparse from gwakeonlan.constants import (APP_NAME, APP_VERSION, VERBOSE_LEVEL_QUIET, VERBOSE_LEVEL_NORMAL, VERBOSE_LEVEL_MAX) class CommandLineOptions(object): """ Parse command line arguments """ def __init__(self): self.parser = argparse.ArgumentParser(prog=None, description=APP_NAME) self.parser.set_defaults(verbose_level=VERBOSE_LEVEL_NORMAL) self.parser.add_argument('-V', '--version', action='version', version=f'{APP_NAME} v{APP_VERSION}') self.parser.add_argument('-v', '--verbose', dest='verbose_level', action='store_const', const=VERBOSE_LEVEL_MAX, help='show error and information messages') self.parser.add_argument('-q', '--quiet', dest='verbose_level', action='store_const', const=VERBOSE_LEVEL_QUIET, help='hide error and information messages') self.parser.add_argument('-T', '--autotest', dest='autotest', action='store_true', help='execute automatic test with no ' 'interaction') self.options = None # noinspection PyProtectedMember,PyUnresolvedReferences def add_group(self, name: str) -> argparse._ArgumentGroup: """ Add a command-line options group :param name: name for the new group :return: _ArgumentGroup object with the new command-line options group """ return self.parser.add_argument_group(name) def parse_options(self) -> argparse.Namespace: """ Parse command-line options :return: command-line options """ self.options = self.parser.parse_args() return self.options gwakeonlan-0.8.6/gwakeonlan/constants.py000066400000000000000000000070101466365517000204020ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import pathlib import sys from xdg import BaseDirectory # Application constants APP_NAME = 'gWakeOnLAN' APP_VERSION = '0.8.6' APP_DESCRIPTION = 'Wake up your machines using Wake on LAN' APP_DOMAIN = 'gwakeonlan' APP_AUTHOR = 'Fabio Castelli' APP_AUTHOR_EMAIL = 'muflone@muflone.com' APP_COPYRIGHT = f'Copyright 2009-2024 {APP_AUTHOR}' APP_ID = f'{APP_DOMAIN}.muflone.com' URL_AUTHOR = 'http://www.muflone.com/' URL_APPLICATION = f'{URL_AUTHOR}{APP_DOMAIN}/' URL_SOURCES = f'https://github.com/muflone/{APP_DOMAIN}/' URL_TRANSLATIONS = f'https://explore.transifex.com/muflone/{APP_DOMAIN}/' # Other constants VERBOSE_LEVEL_QUIET = 0 VERBOSE_LEVEL_NORMAL = 1 VERBOSE_LEVEL_MAX = 2 DEFAULT_UDP_PORT = 9 BROADCAST_ADDRESS = '255.255.255.255' # Paths constants path_xdg_data_home = pathlib.Path(BaseDirectory.xdg_data_home) icon_name = f'{APP_DOMAIN}.png' if (pathlib.Path('data') / icon_name).is_file(): # Use relative paths DIR_PREFIX = pathlib.Path('data').parent.absolute() DIR_LOCALE = DIR_PREFIX / 'locale' DIR_DOCS = DIR_PREFIX / 'doc' elif (path_xdg_data_home / APP_DOMAIN / 'data' / icon_name).is_file(): # Use local user path DIR_PREFIX = path_xdg_data_home / APP_DOMAIN DIR_LOCALE = path_xdg_data_home / 'locale' DIR_DOCS = path_xdg_data_home / 'doc' / APP_DOMAIN elif (pathlib.Path(__file__).parent.parent / 'share' / APP_DOMAIN / 'data' / icon_name).is_file(): # Use local user path in the local Python directory DIR_PREFIX = pathlib.Path(__file__).parent.parent / 'share' / APP_DOMAIN DIR_LOCALE = DIR_PREFIX.parent / 'locale' DIR_DOCS = DIR_PREFIX.parent / 'doc' / APP_DOMAIN else: # Use system path path_prefix = pathlib.Path(sys.prefix) DIR_PREFIX = path_prefix / 'share' / APP_DOMAIN DIR_LOCALE = path_prefix / 'share' / 'locale' DIR_DOCS = path_prefix / 'share' / 'doc' / APP_DOMAIN # Set the paths for the folders DIR_DATA = DIR_PREFIX / 'data' DIR_ICONS = DIR_DATA / 'icons' DIR_UI = DIR_PREFIX / 'ui' try: # In read-only environments, the settings folder cannot be created # (e.g. in a Debian pbuilder fakeroot) DIR_SETTINGS = pathlib.Path(BaseDirectory.save_config_path(APP_DOMAIN)) except PermissionError: # Get the settings path without actually creating it DIR_SETTINGS = pathlib.Path(BaseDirectory.xdg_config_home) / APP_DOMAIN # Set the paths for the data files FILE_ICON = DIR_DATA / icon_name FILE_CONTRIBUTORS = DIR_DOCS / 'contributors' FILE_TRANSLATORS = DIR_DOCS / 'translators' FILE_LICENSE = DIR_DOCS / 'license' FILE_RESOURCES = DIR_DOCS / 'resources' # Set the paths for configuration files FILE_SETTINGS = DIR_SETTINGS / 'settings.conf' # Set the paths for others files FILE_ARP_CACHE = '/proc/net/arp' gwakeonlan-0.8.6/gwakeonlan/functions.py000066400000000000000000000125251466365517000204050ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import itertools import logging import pathlib import struct import socket from gi.repository import Gtk from gi.repository import GdkPixbuf from gwakeonlan.constants import DIR_UI def format_mac_address(mac): """Return the mac address formatted with colon""" mac = mac.replace(':', '').replace('.', '').replace('-', '') return ':'.join([mac[i:i+2] for i in range(0, len(mac), 2)]).upper() def get_pixbuf_from_icon_name(icon_name, size): """Get a Gdk.PixBuf from a theme icon""" theme = Gtk.IconTheme.get_default() path_icon_name = pathlib.Path(icon_name) if theme.has_icon(icon_name): # The icon was a theme icon icon = theme.load_icon(icon_name=icon_name, size=size, flags=Gtk.IconLookupFlags.USE_BUILTIN) elif theme.has_icon(path_icon_name.stem): # The theme contains an icon with the same file name icon = theme.load_icon(icon_name=path_icon_name.stem, size=size, flags=Gtk.IconLookupFlags.USE_BUILTIN) elif path_icon_name.is_file(): # The icon was a full filename icon = GdkPixbuf.Pixbuf.new_from_file(icon_name) else: # The icon was not found in the current theme, search for filenames # with png or jpg extensions if path_icon_name.suffix.lower() in ('.png', '.jpg', '.xpm', '.svg'): filenames = (icon_name, ) else: filenames = (f'{icon_name}.png', f'{icon_name}.jpg', f'{icon_name}.xpm', f'{icon_name}.svg') # Search for filenames in icons and pixmaps directories icon = None search_in_paths = ('/usr/share/icons', '/usr/share/pixmaps') for path, filename in itertools.product(search_in_paths, filenames): file_path = pathlib.Path(path) / filename if file_path.is_file(): icon = GdkPixbuf.Pixbuf.new_from_file(str(file_path)) break if icon: # If size is not correct then resize the icon to the requested size if icon.get_width() != size or icon.get_height() != size: icon = icon.scale_simple(size, size, GdkPixbuf.InterpType.BILINEAR) else: logging.warning(f'missing icon: {icon_name}') return icon def get_treeview_selected_row(widget): """Return the selected row in a GtkTreeView""" return widget.get_selection().get_selected()[1] def get_ui_file(filename): """Return the full path of a Glade/UI file""" return str(DIR_UI / filename) def process_events(): """Process every pending GTK+ event""" while Gtk.events_pending(): Gtk.main_iteration() def readlines(filename, empty_lines=False): """Read all the lines of a filename, optionally skipping empty lines""" result = [] with open(filename) as f: for line in f.readlines(): line = line.strip() if line or empty_lines: result.append(line) f.close() return result def show_message_dialog_yesno(parent, message, title, default_response): """Show a GtkMessageDialog with yes and no buttons""" dialog = Gtk.MessageDialog( parent=parent, flags=Gtk.DialogFlags.MODAL, type=Gtk.MessageType.QUESTION, buttons=Gtk.ButtonsType.YES_NO, message_format=message ) dialog.set_title(title) if default_response: dialog.set_default_response(default_response) response = dialog.run() dialog.destroy() return response def wake_on_lan(mac_address, port_number, destination): """Turn on remote machine using Wake On LAN""" logging.info(f'turning on: {mac_address} ' f'through {destination} ' f'using port number {port_number}') # Magic packet (6 times FF + 16 times MAC address) packet = 'FF' * 6 + mac_address.replace(':', '') * 16 data = [] for i in range(0, len(packet), 2): data.append(struct.pack('B', int(packet[i:i+2], 16))) # Send magic packet to the destination logging.info(f'sending packet {packet} [{len(packet)}/{len(data)}]\n') sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) if destination == '255.255.255.255': destination = '' data = b''.join(data) for _ in range(10): sock.sendto(data, (destination, port_number)) gwakeonlan-0.8.6/gwakeonlan/gtkbuilder_loader.py000066400000000000000000000040221466365517000220500ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## from gi.repository import Gtk class GtkBuilderLoader(object): def __init__(self, *ui_files): """Load one or more ui files for GtkBuilder""" self.builder = Gtk.Builder() for ui_filename in ui_files: self.builder.add_from_file(ui_filename) self.__widgets = {} def __getattr__(self, key): """Get a widget from GtkBuilder using class member name""" if key not in self.__widgets: self.__widgets[key] = self.builder.get_object(key) assert self.__widgets[key], f'Missing widget: {key}' return self.__widgets[key] def get_objects(self): """Get the widgets list from GtkBuilder""" return self.builder.get_objects() def get_objects_by_type(self, object_type): """Get the widgets list with a specific type from GtkBuilder""" return [w for w in self.get_objects() if isinstance(w, object_type)] def get_object(self, key): """Get a widget from GtkBuilder using a method""" return self.__getattr__(key) def connect_signals(self, handlers): """Connect all the Gtk signals to a group of handlers""" self.builder.connect_signals(handlers) gwakeonlan-0.8.6/gwakeonlan/import_ethers.py000066400000000000000000000035031466365517000212550ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Robin Schneider # Copyright: 2015 Robin Schneider # License: GPL-3+ # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## from gwakeonlan.constants import BROADCAST_ADDRESS, DEFAULT_UDP_PORT from gwakeonlan.models.machine_item import MachineItem class ImportEthers(object): def __init__(self, import_l3_dest=BROADCAST_ADDRESS): self.import_l3_dest = import_l3_dest def import_file(self, filepath, model, icon): with open(filepath, 'r') as import_fh: for line in import_fh: line = line.split(sep='#', maxsplit=1)[0].strip() if line: mac_address, machine_name = line.split() model.add_data(MachineItem( name=machine_name, mac_address=(mac_address .replace('.', ':') .replace(' ', ':') .replace('-', ':')), port_number=DEFAULT_UDP_PORT, destination=self.import_l3_dest, icon=icon)) gwakeonlan-0.8.6/gwakeonlan/localize.py000066400000000000000000000041351466365517000201750ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## from gettext import gettext, dgettext localized_messages = {'': ''} def store_message(message, translated): """Store a translated message in the localized_messages list""" localized_messages[message] = translated def strip_colon(message): """Remove the colons from the message""" return message.replace(':', '') def strip_underline(message): """Remove the underlines from the message""" return message.replace('_', '') def text(message, gtk30=False, context=None): """Return a translated message and cache it for reuse""" if message not in localized_messages: if gtk30: # Get a message translated from GTK+ 3 domain full_message = message if not context else f'{context}\04{message}' localized_messages[message] = dgettext('gtk30', full_message) # Fix for untranslated messages with context if context and localized_messages[message] == full_message: localized_messages[message] = dgettext('gtk30', message) else: localized_messages[message] = gettext(message) return localized_messages[message] # This special alias is used to track localization requests to catch # by xgettext. The text() calls aren't tracked by xgettext _ = text gwakeonlan-0.8.6/gwakeonlan/main.py000066400000000000000000000047771466365517000173330ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import logging import gwakeonlan.requires # noqa: F401 from gwakeonlan.app import Application from gwakeonlan.command_line_options import CommandLineOptions from gwakeonlan.constants import (DIR_DATA, DIR_DOCS, DIR_LOCALE, DIR_PREFIX, DIR_SETTINGS, DIR_UI) import gwakeonlan.translations # noqa: F401 def main(): command_line_options = CommandLineOptions() options = command_line_options.parse_options() # Set logging level verbose_levels = {0: logging.ERROR, 1: logging.INFO, 2: logging.DEBUG} logging.basicConfig(level=verbose_levels[options.verbose_level], format='%(asctime)s ' '%(levelname)-8s ' '%(filename)-25s ' 'line: %(lineno)-5d ' '%(funcName)-30s ' 'pid: %(process)-9d ' '%(message)s') # Log paths for debug purposes # Not using {VARIABLE=} as it's not compatible with Python 3.6 logging.debug(f'DIR_PREFIX={str(DIR_PREFIX)}') logging.debug(f'DIR_LOCALE={str(DIR_LOCALE)}') logging.debug(f'DIR_DOCS={str(DIR_DOCS)}') logging.debug(f'DIR_DATA={str(DIR_DATA)}') logging.debug(f'DIR_UI={str(DIR_UI)}') logging.debug(f'DIR_SETTINGS={str(DIR_SETTINGS)}') # Start the application app = Application(options=options) app.run(None) gwakeonlan-0.8.6/gwakeonlan/models/000077500000000000000000000000001466365517000173015ustar00rootroot00000000000000gwakeonlan-0.8.6/gwakeonlan/models/__init__.py000066400000000000000000000015301466365517000214110ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## gwakeonlan-0.8.6/gwakeonlan/models/abstract.py000066400000000000000000000055421466365517000214640ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## class ModelAbstract(object): COL_KEY = 0 def __init__(self, model): self.model = model # Fill the rows' dictionary with the model items self.rows = {} for row in self.model: name = row[self.COL_KEY] self.rows[name] = self.model.get_iter(row.path) def __len__(self): """Return the number of items in the model""" return len(self.model) def __iter__(self): """Iterate the rows keys""" return self.rows.__iter__() def clear(self): """Clear the model""" self.rows.clear() return self.model.clear() def add_data(self, item): """Add a new row to the model if it doesn't exist""" pass def get_data(self, treeiter, column): """Get informaion from a TreeIter column""" return self.get_model_row(treeiter)[column] def set_data(self, treeiter, column, value): """Update an existing TreeIter""" self.get_model_row(treeiter)[column] = value def get_key(self, treeiter): """Get the name from a TreeIter""" return self.get_model_row(treeiter)[self.COL_KEY] def get_iter(self, key): """Get a TreeIter from its key""" return self.rows.get(key) def get_model_row(self, treeiter): """Get a TreeModelRow from a TreeIter""" return self.model[treeiter] def get_path(self, treeiter): """Get the path from a TreeIter""" return self.get_model_row(treeiter).path def get_path_by_name(self, name): """Get the path from a name""" return self.get_model_row(self.get_iter(name)).path def remove(self, treeiter): """Remove a TreeIter""" self.rows.pop(self.get_key(treeiter)) self.model.remove(treeiter) def dump(self): """Extract the model data to a dict object""" pass def load(self, items): """Load the model data from a dict object""" for key in sorted(items.iterkeys()): self.add_data(items[key]) gwakeonlan-0.8.6/gwakeonlan/models/arpcache.py000066400000000000000000000071001466365517000214170ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import logging import os.path import socket from gwakeonlan.constants import FILE_ARP_CACHE from gwakeonlan.models.abstract import ModelAbstract from gwakeonlan.models.arpcache_item import ArpCacheItem class ModelArpCache(ModelAbstract): COL_IPADDRESS = 0 COL_MACADDRESS = 1 COL_HOSTNAME = 2 def add_data(self, item): """Add a new row to the model if it doesn't exist""" super(self.__class__, self).add_data(item) if item.ip_address not in self.rows: new_row = self.model.append(( item.ip_address, item.mac_address.upper(), item.hostname )) self.rows[item.ip_address] = new_row def refresh(self): """Clear the model and reload all the hosts from the ARP cache file""" self.clear() # Read ARP cache file if os.path.isfile(FILE_ARP_CACHE): try: arpf = open(FILE_ARP_CACHE, 'r') # Skip first and last line for line in arpf.readlines()[1:]: if line: # Add IP Address and MAC address to the model logging.debug(f'arp line:\n{line}') arp_ip = line[:17].rstrip() arp_mac = line[41:58].upper() # Skip incomplete MAC addresses if arp_mac != '00:00:00:00:00:00': detected_hostname = socket.getfqdn(arp_ip) # I will not trust of getfqdn if the returned # hostname is the same of the source IP address if detected_hostname == arp_ip: detected_hostname = '' logging.info(f'discovered {arp_ip} ' f'with address {arp_mac}') self.add_data(ArpCacheItem( ip_address=arp_ip, mac_address=arp_mac, hostname=detected_hostname )) arpf.close() except (FileNotFoundError, PermissionError): logging.error(f'unable to read {FILE_ARP_CACHE}') def get_ip_address(self, treeiter): """Returns the IP address for the selected TreeIter""" return self.model[treeiter][self.COL_IPADDRESS] def get_mac_address(self, treeiter): """Returns the MAC address for the selected TreeIter""" return self.model[treeiter][self.COL_MACADDRESS] def get_hostname(self, treeiter): """Returns the hostname for the selected TreeIter""" return self.model[treeiter][self.COL_HOSTNAME] gwakeonlan-0.8.6/gwakeonlan/models/arpcache_item.py000066400000000000000000000020351466365517000224370ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## class ArpCacheItem(object): def __init__(self, ip_address, mac_address, hostname): self.ip_address = ip_address self.mac_address = mac_address self.hostname = hostname gwakeonlan-0.8.6/gwakeonlan/models/machine_item.py000066400000000000000000000021461466365517000223000ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## class MachineItem(object): def __init__(self, name, mac_address, port_number, destination, icon): self.name = name self.mac_address = mac_address self.port_number = port_number self.destination = destination self.icon = icon gwakeonlan-0.8.6/gwakeonlan/models/machines.py000066400000000000000000000070641466365517000214510ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## from gwakeonlan.constants import BROADCAST_ADDRESS from gwakeonlan.models.abstract import ModelAbstract class ModelMachines(ModelAbstract): COL_SELECTED = 1 COL_MACADDRESS = 2 COL_REQUESTTYPE = 3 COL_DESTINATION = 4 COL_PORTNR = 5 COL_ICON = 6 def add_data(self, item): """Add a new row to the model if it doesn't exist""" super(self.__class__, self).add_data(item) if item.name not in self.rows: new_row = self.model.append(( item.name, False, item.mac_address.upper(), 'Local' if item.destination == BROADCAST_ADDRESS else 'Internet', item.destination, item.port_number, item.icon )) self.rows[item.name] = new_row def get_selected(self, treeiter): """Return if the TreeIter is selected""" return self.model[treeiter][self.COL_SELECTED] def set_selected(self, treeiter, value): """Set the TreeIter selection""" self.model[treeiter][self.COL_SELECTED] = value def get_machine_name(self, treeiter): """Return the machine name from a TreeIter""" return self.model[treeiter][self.COL_KEY] def set_machine_name(self, treeiter, value): """Set the machine name for a TreeIter""" self.model[treeiter][self.COL_KEY] = value def get_mac_address(self, treeiter): """Return the MAC address from a TreeIter""" return self.model[treeiter][self.COL_MACADDRESS] def set_mac_address(self, treeiter, value): """Set the MAC address for a TreeIter""" self.model[treeiter][self.COL_MACADDRESS] = value def get_request_type(self, treeiter): """Return the request type from a TreeIter""" return self.model[treeiter][self.COL_REQUESTTYPE] def get_destination(self, treeiter): """Return the destination from a TreeIter""" return self.model[treeiter][self.COL_DESTINATION] def set_destination(self, treeiter, value): """Set the destination for a TreeIter""" self.model[treeiter][self.COL_DESTINATION] = value self.model[treeiter][self.COL_REQUESTTYPE] = ( 'Local' if value == BROADCAST_ADDRESS else 'Internet') def get_port_number(self, treeiter): """Return the port number from a TreeIter""" return self.model[treeiter][self.COL_PORTNR] def set_port_number(self, treeiter, value): """Set the port number for a TreeIter""" self.model[treeiter][self.COL_PORTNR] = value def set_icon(self, treeiter, value): """Set the background color for a TreeIter""" self.model[treeiter][self.COL_ICON] = value gwakeonlan-0.8.6/gwakeonlan/requires.py000066400000000000000000000021441466365517000202300ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import gi if gi.require_version('Gtk', '3.0') is None: from gi.repository import Gtk # noqa: F401 if gi.require_version('GdkPixbuf', '2.0') is None: from gi.repository import GdkPixbuf # noqa: F401 gwakeonlan-0.8.6/gwakeonlan/settings.py000066400000000000000000000171521466365517000202360ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import configparser import logging from gwakeonlan.constants import BROADCAST_ADDRESS, DEFAULT_UDP_PORT from gwakeonlan.functions import format_mac_address from gwakeonlan.models.machine_item import MachineItem POSITION_LEFT = 'left' POSITION_TOP = 'top' SIZE_WIDTH = 'width' SIZE_HEIGHT = 'height' DEFAULT_VALUES = {} SECTION_HOSTS = 'hosts' class Settings(object): def __init__(self, filename, case_sensitive): self.model = None # Parse settings from the configuration file self.config = configparser.RawConfigParser() # Set case sensitiveness if requested if case_sensitive: self.config.optionxform = str # Determine which filename to use for settings self.filename = filename logging.debug(f'Loading settings from {self.filename}') self.config.read(self.filename) def get(self, section, option, default=None): """Get an option from a specific section""" if (self.config.has_section(section) and self.config.has_option(section, option)): return self.config.get(section, option) else: return default def set(self, section, option, value): """Save an option in a specific section""" if not self.config.has_section(section): self.config.add_section(section) self.config.set(section, option, value) def get_boolean(self, section, option, default=None): """Get a boolean option from a specific section""" return self.get(section, option, default) == '1' def set_boolean(self, section, option, value): """Save a boolean option in a specific section""" self.set(section, option, '1' if value else '0') def get_int(self, section, option, default=0): """Get an integer option from a specific section""" return int(self.get(section, option, default)) def set_int(self, section, option, value): """Set an integer option from a specific section""" self.set(section, option, int(value)) def get_list(self, section, option, separator=','): """Get an option list from a specific section""" value = self.get(section, option, '') if len(value): return [v.strip() for v in value.split(separator)] def load_preferences(self): """Load preferences""" for option in DEFAULT_VALUES: self.set_preference(option, self.get_preference(option)) def get_preference(self, option): """Get a preference value by option name""" section, default = DEFAULT_VALUES[option] if isinstance(default, bool): method_get = self.get_boolean elif isinstance(default, int): method_get = self.get_int else: method_get = self.get return method_get(section=section, option=option, default=default) def set_preference(self, option, value): """Set a preference value by option name""" section, default = DEFAULT_VALUES[option] if isinstance(default, bool): method_set = self.set_boolean elif isinstance(default, int): method_set = self.set_int else: method_set = self.set return method_set(section=section, option=option, value=value) def save(self): """Save the whole configuration""" file_settings = open(self.filename, mode='w') logging.debug(f'Saving settings to {self.filename}') self.config.write(file_settings) file_settings.close() def get_sections(self): """Return the list of the sections""" return self.config.sections() def get_options(self, section): """Return the list of the options in a section""" return self.config.options(section) def unset_option(self, section, option): """Remove an option from a section""" return self.config.remove_option(section, option) def clear(self): """Remove every data in the settings""" for section in self.get_sections(): self.config.remove_section(section) def restore_window_position(self, window, section): """Restore the saved window size and position""" if (self.get_int(section, SIZE_WIDTH) and self.get_int(section, SIZE_HEIGHT)): window.set_default_size( self.get_int(section, SIZE_WIDTH, -1), self.get_int(section, SIZE_HEIGHT, -1)) if (self.get_int(section, POSITION_LEFT) and self.get_int(section, POSITION_TOP)): window.move( self.get_int(section, POSITION_LEFT), self.get_int(section, POSITION_TOP)) def save_window_position(self, window, section): """Save the window size and position""" position = window.get_position() self.set_int(section, POSITION_LEFT, position[0]) self.set_int(section, POSITION_TOP, position[1]) size = window.get_size() self.set_int(section, SIZE_WIDTH, size[0]) self.set_int(section, SIZE_HEIGHT, size[1]) def load_hosts(self, model, icon): """Load hosts settings""" self.model = model if self.config.has_section(SECTION_HOSTS): for machine in self.config.items(SECTION_HOSTS): logging.debug(f'Loading machine: {machine[0]}') # Fix machine configuration from older gWakeOnLAN versions machine = [machine[0], ] + machine[1].split('\\', 4) if len(machine) == 2: machine.append(BROADCAST_ADDRESS) if len(machine) == 3: machine.append(DEFAULT_UDP_PORT) # Add the machine to the model self.model.add_data( MachineItem(name=machine[0], mac_address=format_mac_address(machine[1]), port_number=int(machine[3]), destination=machine[2], icon=icon)) def save_hosts(self, model): """Save hosts settings""" if self.config.has_section(SECTION_HOSTS): self.config.remove_section(SECTION_HOSTS) self.config.add_section(SECTION_HOSTS) for machine in model: treeiter = self.model.get_iter(machine) logging.debug( f'Saving machine: {self.model.get_machine_name(treeiter)}') self.config.set( SECTION_HOSTS, self.model.get_machine_name(treeiter), f'{self.model.get_mac_address(treeiter)}\\' f'{self.model.get_destination(treeiter)}\\' f'{self.model.get_port_number(treeiter)}' ) gwakeonlan-0.8.6/gwakeonlan/translations.py000066400000000000000000000055561466365517000211240ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import gettext import locale from gwakeonlan.constants import APP_DOMAIN, DIR_LOCALE from gwakeonlan.localize import (store_message, strip_colon, strip_underline, text) # Load domain for translation for module in (gettext, locale): module.bindtextdomain(APP_DOMAIN, DIR_LOCALE) module.textdomain(APP_DOMAIN) # Import some translated messages from GTK+ domain for message in ('_Cancel', 'General', '_OK'): store_message(strip_colon(strip_underline(message)), strip_colon(strip_underline(text(message=message, gtk30=True)))) # Import some translated messages from GTK+ domain and context for message in ('_Refresh', ): store_message(strip_colon(strip_underline(message)), strip_colon(strip_underline(text(message=message, gtk30=True, context='Stock label')))) # Import some variations store_message('Destination host', strip_colon(strip_underline(text(message='_Destination host:', gtk30=False)))) store_message('MAC Address', strip_colon(strip_underline(text(message='MAC _Address:', gtk30=False)))) store_message('Machine name', strip_colon(strip_underline(text(message='_Machine name:', gtk30=False)))) store_message('Request type', strip_colon(strip_underline(text(message='Request type:', gtk30=False)))) store_message('Select all', strip_underline(text(message='Select _All', gtk30=True))) store_message('UDP port number', strip_colon(strip_underline(text(message='_UDP port number:', gtk30=False)))) gwakeonlan-0.8.6/gwakeonlan/ui/000077500000000000000000000000001466365517000164335ustar00rootroot00000000000000gwakeonlan-0.8.6/gwakeonlan/ui/__init__.py000066400000000000000000000015301466365517000205430ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## gwakeonlan-0.8.6/gwakeonlan/ui/about.py000066400000000000000000000105471466365517000201260ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import collections import logging from gi.repository import GLib from gi.repository.GdkPixbuf import Pixbuf from gwakeonlan.constants import (APP_AUTHOR, APP_AUTHOR_EMAIL, APP_COPYRIGHT, APP_NAME, APP_VERSION, FILE_CONTRIBUTORS, FILE_ICON, FILE_LICENSE, FILE_TRANSLATORS, URL_APPLICATION, URL_AUTHOR, URL_SOURCES, URL_TRANSLATIONS) from gwakeonlan.functions import readlines from gwakeonlan.localize import _ from gwakeonlan.ui.base import UIBase class UIAbout(UIBase): def __init__(self, parent, settings, options): """Prepare the dialog""" logging.debug(f'{self.__class__.__name__} init') super().__init__(filename='about.ui') # Initialize members self.settings = settings self.options = options # Retrieve the translators list translators = [] for line in readlines(FILE_TRANSLATORS, False): if ':' in line: line = line.split(':', 1)[1] line = line.replace('(at)', '@').strip() if line not in translators: translators.append(line) # Set various properties icon_logo = Pixbuf.new_from_file(str(FILE_ICON)) self.ui.dialog.set_logo(icon_logo) self.ui.dialog.set_transient_for(parent) self.ui.dialog.set_program_name(APP_NAME) self.ui.dialog.set_version(_('Version {VERSION}').format( VERSION=APP_VERSION)) self.ui.dialog.set_comments( _('Wake up your machines using Wake on LAN')) self.ui.dialog.set_website(URL_APPLICATION) self.ui.dialog.set_copyright(APP_COPYRIGHT) # Prepare lists for authors and contributors authors = [f'{APP_AUTHOR} <{APP_AUTHOR_EMAIL}>'] contributors = [] for line in readlines(FILE_CONTRIBUTORS, False): contributors.append(line) if len(contributors) > 0: contributors.insert(0, _('Contributors:')) authors.extend(contributors) self.ui.dialog.set_authors(authors) self.ui.dialog.set_license('\n'.join(readlines(FILE_LICENSE, True))) self.ui.dialog.set_translator_credits('\n'.join(translators)) # Add external URLs resources_urls = collections.OrderedDict({ _('Project home page'): URL_APPLICATION, _('Source code'): URL_SOURCES, _('Author information'): URL_AUTHOR, _('Issues and bugs tracking'): f'{URL_APPLICATION}issues/', _('Translations'): URL_TRANSLATIONS}) for resource_type, url in resources_urls.items(): self.ui.dialog.add_credit_section(resource_type, [url]) # Connect signals from the UI file to the functions with the same name self.ui.connect_signals(self) def show(self): """Show the dialog""" logging.debug(f'{self.__class__.__name__} show') if self.options.autotest: GLib.timeout_add(500, self.ui.dialog.hide) self.ui.dialog.run() self.ui.dialog.hide() def destroy(self): """Destroy the dialog""" logging.debug(f'{self.__class__.__name__} destroy') self.ui.dialog.destroy() self.ui.dialog = None gwakeonlan-0.8.6/gwakeonlan/ui/arpcache.py000066400000000000000000000073601466365517000205610ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import logging from gi.repository import GLib from gi.repository import Gtk from gwakeonlan.functions import get_treeview_selected_row from gwakeonlan.models.arpcache import ModelArpCache from gwakeonlan.ui.base import UIBase SECTION_WINDOW_NAME = 'arp cache' class UIArpCache(UIBase): def __init__(self, parent, settings, options): """Prepare the dialog""" logging.debug(f'{self.__class__.__name__} init') super().__init__(filename='arpcache.ui') # Initialize members self.parent = parent self.settings = settings self.options = options # Prepare the models self.model = ModelArpCache(self.ui.model) self.model.refresh() # Load UI self.load_ui() # Complete initialization self.startup() def load_ui(self): """Load the interface UI""" logging.debug(f'{self.__class__.__name__} load UI') # Initialize titles and tooltips self.set_titles() # Set various properties self.ui.dialog.set_transient_for(self.parent) # Connect signals from the UI file to the functions with the same name self.ui.connect_signals(self) def startup(self): """Complete initialization""" logging.debug(f'{self.__class__.__name__} startup') # Restore the saved size and position self.settings.restore_window_position(window=self.ui.dialog, section=SECTION_WINDOW_NAME) def destroy(self): """Hide and destroy the ARP cache picker dialog""" logging.debug(f'{self.__class__.__name__} destroy') self.ui.dialog.destroy() self.ui.dialog = None def show(self): """Show the dialog""" if self.options.autotest: GLib.timeout_add(500, self.ui.dialog.hide) response = self.ui.dialog.run() self.ui.dialog.hide() return response def do_get_hostname(self): """Returns the hostname of the selected row""" treeiter = get_treeview_selected_row(self.ui.treeview_hosts) if treeiter: return self.model.get_hostname(treeiter) def do_get_ip_address(self): """Returns the IP address of the selected row""" treeiter = get_treeview_selected_row(self.ui.treeview_hosts) if treeiter: return self.model.get_ip_address(treeiter) def do_get_mac_address(self): """Returns the MAC address of the selected row""" treeiter = get_treeview_selected_row(self.ui.treeview_hosts) if treeiter: return self.model.get_mac_address(treeiter) def on_action_refresh_activate(self, widget): """Reload the ARP cache list""" self.model.refresh() def on_treeview_hosts_row_activated(self, widget, path, column): """Treats the double click as the OK button was pressed""" self.ui.dialog.response(Gtk.ResponseType.OK) gwakeonlan-0.8.6/gwakeonlan/ui/base.py000066400000000000000000000123401466365517000177170ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import pathlib from typing import Iterable from gi.repository import Gtk from gwakeonlan.constants import DIR_ICONS from gwakeonlan.functions import get_ui_file from gwakeonlan.gtkbuilder_loader import GtkBuilderLoader from gwakeonlan.localize import strip_underline, text class UIBase(object): def __init__(self, filename): self.ui = GtkBuilderLoader(get_ui_file(filename)) def set_buttons_icons(self, buttons: Iterable) -> None: """ Set icons for buttons :param buttons: tuple or list of buttons to customize :return: None """ for button in buttons: action = button.get_related_action() button.set_image(Gtk.Image.new_from_icon_name( icon_name=action.get_icon_name(), size=Gtk.IconSize.BUTTON)) # Remove the button label for not important buttons if not action.get_is_important(): button.props.label = None def set_titles(self) -> None: """ Set titles and tooltips for Actions, Labels and Buttons :return: None """ # Set Actions labels and short labels for widget in self.ui.get_objects_by_type(Gtk.Action): # Connect the actions accelerators widget.connect_accelerator() # Set labels label = widget.get_label() if not label: label = widget.get_short_label() widget.set_label(text(label)) widget.set_short_label(text(label)) # Set Labels captions for widget in self.ui.get_objects_by_type(Gtk.Label): widget.set_label(text(widget.get_label())) # Initialize buttons labels and tooltips for widget in self.ui.get_objects_by_type(Gtk.Button): action = widget.get_related_action() if action: widget.set_tooltip_text(strip_underline(action.get_label())) else: widget.set_label(strip_underline(text(widget.get_label()))) widget.set_tooltip_text(widget.get_label()) # Initialize column headers titles for widget in self.ui.get_objects_by_type(Gtk.TreeViewColumn): widget.set_title(strip_underline(text(widget.get_title()))) # Initialize shortcuts groups titles for widget in self.ui.get_objects_by_type(Gtk.ShortcutsGroup): widget.props.title = strip_underline(text(widget.props.title)) # Initialize shortcuts titles for widget in self.ui.get_objects_by_type(Gtk.ShortcutsShortcut): widget.props.title = strip_underline(text(widget.props.title)) # Initialize menuitems labels for widget in self.ui.get_objects_by_type(Gtk.MenuItem): if not isinstance(widget, Gtk.SeparatorMenuItem): widget.set_label(strip_underline(text(widget.get_label()))) for widget in self.ui.get_objects_by_type(Gtk.CheckMenuItem): widget.set_label(strip_underline(text(widget.get_label()))) for widget in self.ui.get_objects_by_type(Gtk.RadioMenuItem): widget.set_label(strip_underline(text(widget.get_label()))) def load_image_file(self, image: Gtk.Image) -> bool: """ Load an icon from filesystem if existing """ icon_name, _ = image.get_icon_name() icon_path = pathlib.Path(DIR_ICONS / f'{icon_name}.png') if icon_path.is_file(): image.set_from_file(str(icon_path)) return icon_path.is_file() def set_buttons_style_suggested_action(self, buttons: Iterable): """Add the suggested-action style to a widget""" for button in buttons: button.get_style_context().add_class('suggested-action') def set_buttons_style_destructive_action(self, buttons: Iterable): """Add the destructive-action style to a widget""" for button in buttons: button.get_style_context().add_class('destructive-action') def show_popup_menu(self, menu: Gtk.Menu): """Show a popup menu at the current position""" if not Gtk.check_version(3, 22, 0): menu.popup_at_pointer(trigger_event=None) else: menu.popup(parent_menu_shell=None, parent_menu_item=None, func=None, data=0, button=0, activate_time=Gtk.get_current_event_time()) gwakeonlan-0.8.6/gwakeonlan/ui/detail.py000066400000000000000000000150541466365517000202540ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import logging from gi.repository import GLib from gi.repository import Gtk from gwakeonlan.constants import BROADCAST_ADDRESS from gwakeonlan.functions import format_mac_address from gwakeonlan.localize import _ from gwakeonlan.ui.base import UIBase SECTION_WINDOW_NAME = 'detail' class UIDetail(UIBase): def __init__(self, parent, settings, options): """Prepare the dialog""" logging.debug(f'{self.__class__.__name__} init') super().__init__(filename='detail.ui') # Initialize members self.parent = parent self.settings = settings self.options = options # Load UI self.load_ui() # Complete initialization self.startup() def load_ui(self): """Load the interface UI""" logging.debug(f'{self.__class__.__name__} load UI') # Initialize titles and tooltips self.set_titles() # Set various properties self.ui.dialog.set_transient_for(self.parent) # Load icon from file self.load_image_file(self.ui.image_computer) # Connect signals from the UI file to the functions with the same name self.ui.connect_signals(self) def startup(self): """Complete initialization""" logging.debug(f'{self.__class__.__name__} startup') # Restore the saved size and position self.settings.restore_window_position(window=self.ui.dialog, section=SECTION_WINDOW_NAME) def show(self): """Show the dialog""" if self.options.autotest: GLib.timeout_add(500, self.ui.dialog.hide) response = 0 self.ui.label_error.set_property('visible', False) self.ui.dialog.set_title(_('Edit machine') if self.do_get_mac_address() else _('Add machine')) while not response: response = self.ui.dialog.run() if response == Gtk.ResponseType.OK: # Check values for valid response err_msg = '' mac = (self.do_get_mac_address() .replace(':', '') .replace('.', '') .replace('-', '')) if not self.do_get_machine_name(): err_msg = _('Missing machine name') self.ui.text_machine_name.grab_focus() elif not (len(mac) == 12 and all(c in '1234567890ABCDEF' for c in mac.upper())): err_msg = _('Invalid MAC address') self.ui.text_mac_address.grab_focus() elif (self.ui.radio_request_internet.get_active() and self.do_get_destination() in ('', BROADCAST_ADDRESS)): err_msg = _('Invalid destination host') self.ui.text_destination_host.grab_focus() # There was an error, don't close the dialog if err_msg: self.ui.label_error.set_property('visible', True) self.ui.label_error.set_markup( f'{err_msg}') # Don't close the dialog if there's some error response = 0 self.ui.dialog.hide() return response def destroy(self): """Destroy the dialog""" logging.debug(f'{self.__class__.__name__} destroy') self.ui.dialog.destroy() self.ui.dialog = None def do_get_destination(self): """Return the destination host""" return self.ui.text_destination_host.get_text() def do_get_mac_address(self): """Return the MAC address""" return format_mac_address(self.ui.text_mac_address.get_text()) def do_get_machine_name(self): """Return the machine name""" return self.ui.text_machine_name.get_text() def do_get_port_number(self): """Return the port number""" return self.ui.spin_port_number.get_value_as_int() def do_get_request_type_internet(self): """Return if the request type is Internet""" return self.ui.radio_request_internet.get_active() def do_load_data(self, machine_name, mac_address, portnr, destination): """Load the fields with the specified values""" self.ui.text_machine_name.set_text(machine_name) self.ui.text_mac_address.set_text(mac_address) self.ui.spin_port_number.set_value(portnr) self.ui.text_destination_host.set_text(destination) if destination in (BROADCAST_ADDRESS, ''): self.ui.radio_request_local.set_active(True) self.ui.text_destination_host.set_sensitive(False) else: self.ui.radio_request_internet.set_active(True) self.ui.text_destination_host.set_sensitive(True) self.ui.text_machine_name.grab_focus() def on_radio_request_type_toggled(self, widget): """A Radio button was pressed""" request_type_internet = self.ui.radio_request_internet.get_active() # Check the request type if request_type_internet: # If there was the broadcast address it will be deleted if self.do_get_destination() == BROADCAST_ADDRESS: self.ui.text_destination_host.set_text('') else: # For local request type the broadcast address will be used self.ui.text_destination_host.set_text(BROADCAST_ADDRESS) # Enable the destination fields accordingly to the request type self.ui.label_destination_host.set_sensitive(request_type_internet) self.ui.text_destination_host.set_sensitive(request_type_internet) # Hide previous errors self.ui.label_error.set_visible(False) gwakeonlan-0.8.6/gwakeonlan/ui/main.py000066400000000000000000000360441466365517000177400ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import logging import time from gi.repository import Gdk from gi.repository import GdkPixbuf from gi.repository import GLib from gi.repository import Gtk from gwakeonlan.constants import (FILE_ICON, APP_NAME, BROADCAST_ADDRESS, DEFAULT_UDP_PORT, FILE_SETTINGS) from gwakeonlan.functions import (format_mac_address, get_pixbuf_from_icon_name, get_treeview_selected_row, process_events, show_message_dialog_yesno, wake_on_lan) from gwakeonlan.import_ethers import ImportEthers from gwakeonlan.localize import _, text from gwakeonlan.settings import Settings from gwakeonlan.models.machine_item import MachineItem from gwakeonlan.models.machines import ModelMachines from gwakeonlan.ui.about import UIAbout from gwakeonlan.ui.base import UIBase from gwakeonlan.ui.arpcache import UIArpCache from gwakeonlan.ui.detail import UIDetail from gwakeonlan.ui.shortcuts import UIShortcuts SECTION_WINDOW_NAME = 'main window' class UIMain(UIBase): def __init__(self, application, options): """Prepare the main window""" logging.debug(f'{self.__class__.__name__} init') super().__init__(filename='main.ui') # Initialize members self.application = application self.options = options self.detected_addresses = {} self.model_machines = None # Load icons self.icon_empty = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 24, 24) self.icon_empty.fill(0) self.icon_yes = get_pixbuf_from_icon_name('gtk-yes', 24) self.icon_no = get_pixbuf_from_icon_name('gtk-no', 24) # Load settings self.settings = Settings(filename=FILE_SETTINGS, case_sensitive=True) self.settings.load_preferences() self.settings_map = {} # Load UI self.load_ui() # Prepare the models self.model_machines = ModelMachines(self.ui.model) # Load the others dialogs self.detail = UIDetail(self.ui.window, self.settings, options) # Complete initialization self.startup() def load_ui(self): """Load the interface UI""" logging.debug(f'{self.__class__.__name__} load UI') # Initialize titles and tooltips self.set_titles() # Initialize Gtk.HeaderBar self.ui.header_bar.props.title = self.ui.window.get_title() self.ui.window.set_titlebar(self.ui.header_bar) self.set_buttons_icons(buttons=[self.ui.button_turnon, self.ui.button_add, self.ui.button_edit, self.ui.button_delete, self.ui.button_about, self.ui.button_options]) # Set buttons with always show image for button in [self.ui.button_turnon]: button.set_always_show_image(True) # Set buttons as suggested self.set_buttons_style_suggested_action( buttons=[self.ui.button_turnon]) # Set various properties self.ui.window.set_title(APP_NAME) self.ui.window.set_icon_from_file(str(FILE_ICON)) self.ui.window.set_application(self.application) # Connect signals from the UI file to the functions with the same name self.ui.connect_signals(self) def startup(self): """Complete initialization""" logging.debug(f'{self.__class__.__name__} startup') # Load settings for setting_name, action in self.settings_map.items(): action.set_active(self.settings.get_preference( option=setting_name)) # Load hosts self.settings.load_hosts(model=self.model_machines, icon=self.icon_empty) # Restore the saved size and position self.settings.restore_window_position(window=self.ui.window, section=SECTION_WINDOW_NAME) def run(self): """Show the UI""" logging.debug(f'{self.__class__.__name__} run') if self.options.autotest: GLib.timeout_add(500, self.do_autotests) self.ui.window.show_all() def do_autotests(self): """Perform a series of autotests""" # Show the information dialog for i in range(3): self.ui.action_about.activate() process_events() time.sleep(0.2) # Show the add host dialog for i in range(1, 4): self.detail.do_load_data(f'testing {i}', format_mac_address((str(i)) * 16), i, BROADCAST_ADDRESS) self.detail.show() process_events() time.sleep(0.2) # Show the ARP cache dialog for i in range(3): self.ui.action_import_arp_cache.activate() process_events() time.sleep(0.2) process_events() time.sleep(0.5) # Close the main window self.ui.window.destroy() def do_turn_on(self, treeiter): """Turn on the machine for the specified TreeIter""" mac_address = self.model_machines.get_mac_address(treeiter=treeiter) port_number = self.model_machines.get_port_number(treeiter=treeiter) destination = self.model_machines.get_destination(treeiter=treeiter) try: wake_on_lan(mac_address=mac_address, port_number=port_number, destination=destination) self.model_machines.set_icon(treeiter=treeiter, value=self.icon_yes) except OSError as error: logging.error(f'Unable to turn on: {mac_address} ' f'through {destination} ' f'using port number {port_number}') logging.error(error) self.model_machines.set_icon(treeiter=treeiter, value=self.icon_no) def on_action_about_activate(self, widget): """Show the information dialog""" dialog = UIAbout(parent=self.ui.window, settings=self.settings, options=self.options) dialog.show() dialog.destroy() def on_action_shortcuts_activate(self, widget): """Show the shortcuts dialog""" dialog = UIShortcuts(parent=self.ui.window, settings=self.settings, options=self.options) dialog.show() def on_action_quit_activate(self, widget): """Save the settings and close the application""" logging.debug(f'{self.__class__.__name__} quit') self.settings.save_window_position(window=self.ui.window, section=SECTION_WINDOW_NAME) self.settings.save_hosts(self.model_machines) self.settings.save() self.ui.window.destroy() self.detail.destroy() self.application.quit() def on_action_options_menu_activate(self, widget): """Open the options menu""" self.ui.button_options.clicked() def on_action_add_activate(self, widget): """Add a new empty machine""" self.detail.do_load_data(machine_name='', mac_address='', portnr=DEFAULT_UDP_PORT, destination=BROADCAST_ADDRESS) # Check if the OK button in the dialog was pressed if self.detail.show() == Gtk.ResponseType.OK: self.model_machines.add_data( MachineItem( name=self.detail.do_get_machine_name(), mac_address=self.detail.do_get_mac_address(), port_number=self.detail.do_get_port_number(), destination=self.detail.do_get_destination(), icon=self.icon_empty)) # Automatically select the last inserted item self.ui.treeview_machines.set_cursor( len(self.model_machines) - 1) def on_action_edit_activate(self, widget): """Edit the selected machine""" treeiter = get_treeview_selected_row(self.ui.treeview_machines) if treeiter: self.detail.do_load_data( self.model_machines.get_machine_name(treeiter=treeiter), self.model_machines.get_mac_address(treeiter=treeiter), self.model_machines.get_port_number(treeiter=treeiter), self.model_machines.get_destination(treeiter=treeiter) ) if self.detail.show() == Gtk.ResponseType.OK: self.model_machines.set_machine_name( treeiter=treeiter, value=self.detail.do_get_machine_name()) self.model_machines.set_mac_address( treeiter=treeiter, value=self.detail.do_get_mac_address()) self.model_machines.set_port_number( treeiter=treeiter, value=self.detail.do_get_port_number()) self.model_machines.set_destination( treeiter=treeiter, value=self.detail.do_get_destination()) def on_action_delete_activate(self, widget): """Delete the selected machine""" treeiter = get_treeview_selected_row(self.ui.treeview_machines) if treeiter: # Ask confirmation to delete the selected machine if show_message_dialog_yesno( self.ui.window, _('Are you sure you want to remove the selected machine?'), _('Delete machine'), Gtk.ResponseType.NO ) == Gtk.ResponseType.YES: # Delete the selected machine self.model_machines.remove(treeiter) def on_action_turnon_activate(self, widget): """Launch the Wake On LAN for all the selected machines""" selected_count = 0 for key in self.model_machines: treeiter = self.model_machines.get_iter(key) self.model_machines.set_icon(treeiter=treeiter, value=self.icon_empty) for key in self.model_machines: # Turn on any selected machine treeiter = self.model_machines.get_iter(key) if self.model_machines.get_selected(treeiter=treeiter): selected_count += 1 self.do_turn_on(treeiter) if selected_count == 0: # When no machines are selected use the currently selected row treeiter = get_treeview_selected_row(self.ui.treeview_machines) if treeiter: self.do_turn_on(treeiter) def on_action_import_arp_cache_activate(self, widget): """Show the ARP cache picker dialog""" dialog = UIArpCache(parent=self.ui.window, settings=self.settings, options=self.options) # Check if the OK button in the dialog was pressed if dialog.show() == Gtk.ResponseType.OK: # Check if a valid machine with MAC Address was selected if dialog.do_get_mac_address(): # Add the machine to the model from the ARP cache self.model_machines.add_data( MachineItem(name=dialog.do_get_ip_address(), mac_address=dialog.do_get_mac_address(), port_number=DEFAULT_UDP_PORT, destination=BROADCAST_ADDRESS, icon=self.icon_empty)) # Select the last machine and edit its details self.ui.treeview_machines.set_cursor( len(self.model_machines) - 1) self.ui.action_edit.activate() # Destroy the dialog dialog.destroy() def on_action_import_ethers_activate(self, widget): """Show the Ethers file importer""" # noinspection PyArgumentList dialog = Gtk.FileChooserDialog( text(message='Select a File', gtk30=True), None, Gtk.FileChooserAction.OPEN, (text(message='_Cancel', gtk30=True), Gtk.ResponseType.CANCEL, text(message='_Open', gtk30=True), Gtk.ResponseType.OK)) dialog.set_transient_for(self.ui.window) response = dialog.run() if response == Gtk.ResponseType.OK: importer = ImportEthers(BROADCAST_ADDRESS) importer.import_file(filepath=dialog.get_filename(), model=self.model_machines, icon=self.icon_empty) dialog.destroy() def on_action_select_all_activate(self, widget): for key in self.model_machines: treeiter = self.model_machines.get_iter(key) self.model_machines.set_selected(treeiter=treeiter, value=True) def on_action_deselect_all_activate(self, widget): for key in self.model_machines: treeiter = self.model_machines.get_iter(key) self.model_machines.set_selected(treeiter=treeiter, value=False) def on_cell_selected_toggled(self, renderer, treeiter, data=None): """Select or deselect an item""" self.model_machines.set_selected( treeiter=treeiter, value=not self.model_machines.get_selected(treeiter=treeiter)) def on_treeview_machines_button_release_event(self, widget, event): if event.button == Gdk.BUTTON_SECONDARY: self.ui.menu_select_machines.popup_at_pointer(event) def on_treeview_machines_row_activated(self, widget, path, column): """The double click on a row acts as the Edit machine button""" self.ui.action_edit.activate() def on_window_delete_event(self, widget, event): """Close the application by closing the main window""" self.ui.action_quit.activate() gwakeonlan-0.8.6/gwakeonlan/ui/shortcuts.py000066400000000000000000000032741466365517000210510ustar00rootroot00000000000000## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import logging from gwakeonlan.ui.base import UIBase class UIShortcuts(UIBase): def __init__(self, parent, settings, options): """Prepare the dialog""" logging.debug(f'{self.__class__.__name__} init') super().__init__(filename='shortcuts.ui') # Initialize members self.settings = settings self.options = options # Initialize titles and tooltips self.set_titles() # Load the user interface self.ui.shortcuts.set_transient_for(parent) def show(self): """Show the shortcuts dialog""" logging.debug(f'{self.__class__.__name__} show') self.ui.shortcuts.show() def destroy(self): """Destroy the shortcuts dialog""" logging.debug(f'{self.__class__.__name__} destroy') self.ui.shortcuts.destroy() self.ui.shortcuts = None gwakeonlan-0.8.6/icons/000077500000000000000000000000001466365517000150035ustar00rootroot00000000000000gwakeonlan-0.8.6/icons/128x128/000077500000000000000000000000001466365517000157405ustar00rootroot00000000000000gwakeonlan-0.8.6/icons/128x128/gwakeonlan.png000066400000000000000000000356151466365517000206060ustar00rootroot00000000000000PNG  IHDR>abKGD pHYs''StIME  3Xx IDATxy,}9;wV<,p'2):U%Z8,$+I*Tbr*;]N)i[-G6%"E1ow_f^,݇XBW;gt{~AaSJ]/~u<.b~9uw^8U/ <ҕi]? ˟ԭBaDa.(B0$1J<]״A* <7 tgyjZ@"~<@Vj\z|§vwrph?>j]>j ?ub{䓿(D߹~@]K:iM^)E,+ O$iƊE7n_as~ZdBYy2٨GnP d,Q'' 4[xWxԃK Ʊzgh <xט kg6X #=@<ȧZWz =\O_wٟ{s76VvW)vsAį_8'l 2ua<~Þl;`7w863avtm6Eg2 N5\yS vg^ gV ׎A,S_YFL^;4! #Xޕo[1 ʼnKBĘڍmTxٟ?Z  EMz&0 8MɧkoMVz(6 :1!agSߩ͓?u7֗,6AKF~H w|̭XuZt]o4DW0v=(U9"?$wvo~#6ZE,Tph5?vk0_T꿘G=k;G>s?/VlE d4vo_~>wUK*;9M瞈xд%++A AEq}8e⧯>?;ޞO[/\l:~cw|R*<{s? nfl ],lA~ Bo'oVVGG]Z"6݁M7%Hg73Y_Y]XD }| 5w~X?=)%Ⅷ~bm&J\I1I>Dz,Z'ĸ]![~+ Qou~D~#{]ή.Z[0- c>7 !Kn$^d>}vaT_Sf}?>/~W\:~9G?&,V5IG!BL*1lqrBb޽^_q%Et"%Q@QN݃.8У}D1:&Jc4;@ ' я&Qsgmf99"`v:6pek\(oXj8(WmjU7K? /M+S*W<‘$Z׍6@M_\9~{Oݦg'82 VZ T (=?B8*3;cRpw+o,X.;嫜n<,Js`z"jfB7ƠP/Z%{YqWpfFmq1aۣ0\ M&I/xd|_"[NF4%JM @DZzxidVH! eb,k p3NA` hZ E?M(D/~=/ǬjԛM4= ~' /ѴFK^lRIPg3diFѯ@4MGCO|xe03'҃Ь3ɔ/wE@pv,խ_emſ(_~8Wk,5>@$s, N@-dZ&mwSqaN놎aąLY[]k$̍b)F|PD\ '%ʵX"J"$*CTqKh?(Mk| qe@(EGY`R->q.&c__~^]pF FMX*9KX(; 2yj8vA0P(8K0&PQVm{̞W 4CIA*S0 B]eWJ8UgOv% DӪ'>::J'D=س >)*f@թY";>5]joT*TjBP2JZ8K< Sqo+X)@&r/5 2/'4(d,jq  }VBmWBЬ)֭:.i"e&(J!=~ T̈́@ %Rc6 <{>Z27X&kיt}EemlSQZa.[E!R*Hc8󵌹i ȞRJ`*sH2(vw\;4q*ma@X]I[F:`/ޭk˙ "QuCj.xы4MΝYeuc Īl^r' VFz)fRGanw0en|}ݣT:6sZ?Qj,-wˬ>!@Y4+,Yj,XQ=nTYl}MR.(TIx(8@106(YJ(Ԕ|ZIWd.e;NI`d[t:tǴ0L*{ COrD1ՓwBP_ؤ4VUJŪb.QE7ll,;OP:,.wYv =<$V wUN;euZ^^3t>u;1k#qtt4v  _}k 9Oi"d*rRN !Gm+)Y:<涨 J_Aѿ0 8&"=˯EuemW@10"(PR_0L ɣOe=5{Hdnǣ".4PcWIk( #*)ƃB>l:,iZH9`e4Dl0*SwЯppXY%LdA1i)R1^wG͒0RB|ܵJ"JIELz(c /P @ic%RwW;"V&J) uרUWZؠ r q|"";D"T"LL]% c\Qc) 7TS |,P2() &C#o'eEI669<<{K!qOʐ`>;{{ZMjU7-L%yDR82N>UH,4T%a%> IFuԋ!~ˣJcg%JCCuc]}ψ?u]'_t:}6{GWA)kqܽ8&"bߦDEYC,-%6!yBN2e8븮EYKB>4CNT0L˫NRG9{|=^1Uʘ}cZ,.,$oU?xPEw|Zo%@K/K/?b}=OM%&"gŽ T\|Π7 'f*S0lVZfOQ+kB55õ]44*usXLʮ/;ei:Y{7Bӈm:/s#6=n h =ܒmۥI`%#ZeLd2#N.͏+F3DiRqn+I|t#t;N '_TO(RPgeJɜT(ޫ?["}пU 'WG%FNK͍5x6ig $,.67&Ng)N28TX1ْZԗG"鱻wfsJ%+gݻIhcUAߘ? 2&pcLhHg"WVuh vy%jKEAus%XӳUΝK&n'7!h-8>l̦yonlRT Mf~0⸙z[DaDq0wYJ6<2 P "a B"#шhq/K"R ,+,6.~ P2cx,A3 RD'Gx^?&w:)B(8[Zki(VD*X>c@fDWC~d _z+j2a0!p|Hx(ŤSz#QJc_&/ $#|V; @IY#GW7c6q<ʕREQ Wa 66/q|t0+(Qt,ArçPd3UByzx_0'7)J"U*I)Q2FY5vg:`aa@ڵ!8 cQNuovK 5&bJ@Y&^l\gc1P+/T<lL2ߚF^4쬌nXx>4q#i$@# 3RR춇lb{6ݡ:lJtj΅QuzJjŻ9mBe,?ӮNjS 5?hUdtk^1sߠzoq;V1/nqƥ 7]fzbΙ}2*ǀ b;8u0kݣY' icUG4#.JJ#[`gBñ+FF^0 0t˴1t0 3M?tBRYbLy.Q!*$,Z64XFz;Bўog#up0Boj#󑛁CE &]R*b%a'#[]LztIVJgzR :Dшh4R#|?4&]ɲydQ;O}]vұ87bx-vnreNqg u]}#(&ʓ:??=z2+sXĩ=f.MHYr[Z$t֓dP'Z;~Cw>n^}pHfF[]0R@}IM;+xS_Q˲x^}JXT+CB?YA+!TxQ#Cit{j!b3C:m*g-|ϼ(Dyzx r@bB*ETټqJZ>^q$ȸOfi5U$0[xK%CwI>ulXBCZ>bBuLYs0sX9_ȃL>rG*2c T+MLRP "aJŸ> b ndS9|HL{o-5&'kZoFl򮜛ǰV?z4_ۮP;q59 |a8N#_GYqڶ]^q$5|N|̫(5U#wՙ&{+,^62io"D`ʸ?V"k[JB4] ݙReV(904sPJ(i<^°VrO5FnD!QCQ)Gw U°Oɰ|9VoǦ\!QK +PXN/܌LD{ >3G/~4ayj?yO)lr R*_aS9H_%~? [hrk-{y^[nN)x嵆`eiӲRAn&4ݿh`[54~aqJJ$#<~jjzXVOL6e. tcឯG%-׿ .\x<#pKv*NdfF(e(,"ql f 6*a\p0ȹUJ' Eqw;R!1 xy6vV5Z^^ǭ&fܺV"^FVLZjռyzF~mm=$m_V, D JIvv{◇e>VUEԽe^ݵh>(?W<`{$-~ %] J<{i{f29S^38v%uܾ}ItMrpO)ܪZ7na-\pЉG[ܸqXN>܁$Nɉ ޔ) 験oC6ΗJ(eDY:vvd5j Z+1o޺FE@gϞXy޺]*k:/nKՕUĹKW0z Gb$y8LfA2 hi~m~L-_()^o_KX𫟇4o},Xa}1t3gԲ]z^lX\hfאqgϞòOܸuDJ\u'n8G^(3/s\@*9m I9g??/_,_V?7apc?'n׈xd7bgwkJ͉kvZ/0aW)5;;8( a1ۄ*SX)Q?eW?z0qJ3J8/tyN2 ].'>Aʕ[̱?+Tx:RkttfqAXgg{wnla'`hL;WꞵR-MʟD3*!VGJ7L̎//9,~yO53Pr ~qTO9~,9aaX/V\vwzgo-S%}etcX@OJUQ8j'Q)D:Qͩ/f7ϚM'8!wasJsǃ!dk|E~u3ӓoxXFV,~U8.aJMTWrj֋UAڄb8lIp;'`|O} K]TY7jbE%@gT]={񭖃i l+g\ iTQSYZ36eSx֪kXHq̬jqTM Ji.Kϩ|cH*? `iR&J%4AǴsoah0U=kc9뭸&nLH 3ΔDv 4pR`m[Pղ6B9[7(C3cZFJE03n 9bzNx ^.Ō& nZR4Lttv>tSrcdm ;66 8W4!2.by?ŵ,[ް"q^-A--;oZ&!r]D4}6 "@iGT]39 #Sy<2c)6 [KIN pfRp1 g5ƫh9y:E"YIqfZ|ƣӹ^J8D^EZz0L6`VuL35I#|Aj5D"jK)5ٽhFϼJUGOSk#-My`S| HGd$B`Y?v:aA]h <83Wa)B:]Jz]^s-Q Ojdh$|M mdm'Va"  (RYIx*5~ %VPt_#s% $9IgRnY)qSXj@R.}HTS;gM>r$΅HMX2ùR*B?yZFXӲ~t0L=C2/! k q pf j& \$8Nr {7է]T*~3.aYT8Vp5e] HDb)L%]$DuNg l$aB&)( RWL!|ؓ 0LoAUYhLy2ߺ,L缦0.aO~}A?ĝ TDQRC!-lS1ygzV*߬q <a'}(4v`MlpděyEFpN]8ʯ10 cjN0LpҽA8o<`<TJ6IOb x]~?ڸQ@Ҕpg7R=Rږ ΝYK+cLTIΝ&kvOy[8wz7YjmQt-ss UWWj3Yj:;Jt&2bsl>P$>}|N$~cU(Bc:5СZi"S-kj%@2qL ۞y S8^}v?ݤ@XLfb:k !S4Ѵ8c"%U!At)Eaċ;|L?;1 !RҘ#뵻;QLH`͊dn3(rā@Gh$6/g d4LNGaB$4 e/yuqD&y 8MF*STBLO)ww3 @{kcWoTg^tLun>+%PJ^9*x<2;ι%7V0K䄬ys,*'q 3^%!izd@sMm`>/O)N+dιTTؿsJ)eLkJb٩X ˫# SFyN!2"=SԌc O0-d h')|9*: MJu^8< ]:8sMJ ~zn˒37=&TZ,4Ndw2q@1aӱI)7 ӸyO~'/^P gS6}''f>WIlY}e9'?/pc%s</f $>)$ 63@p9|Z` )b4)iG;x}]p5ruJScxSA{]b  ~'ŸF~7"BFK?$|8w}&ksi7:|qZ<§N).Jzyp 9h7I\Spvp Y/N uwm+b=IENDB`gwakeonlan-0.8.6/icons/16x16/000077500000000000000000000000001466365517000155705ustar00rootroot00000000000000gwakeonlan-0.8.6/icons/16x16/gwakeonlan.png000066400000000000000000000015521466365517000204270ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYswtEXtSoftwarewww.inkscape.org<IDAT8}Mh\e}L6iI)MLnb̦ !]X` . n(Et#(P.bEM m23;.Ҥnꁳ(G{N|ߣŻB虦+4^.~~GzzY7z1-'s \x=(<1I'_1"$Q+ʚn=s[]@p>я:Rq<-4oX G~$s0leqܤZ~1[bx>,95)s5*;=tGR7ͭ[J|LjA;NNu)6*\]v ͖pmJyL,qw<;k\6QMWUNN10rh˱Uo9vJy@k. [scYك()7 iƩ$U<+T=g=te}C8*"Bw oUI0L> IENDB`gwakeonlan-0.8.6/icons/24x24/000077500000000000000000000000001466365517000155665ustar00rootroot00000000000000gwakeonlan-0.8.6/icons/24x24/gwakeonlan.png000066400000000000000000000027061466365517000204270ustar00rootroot00000000000000PNG  IHDRw=bKGD pHYsyy]tIME  SIDATHǥK\GSշ=n۱$$",CHH b Db + Y J @Eaƞ{zU,&vf2XtT(:QXkƣ_ %T._Y̬?{>g˥b @N_ ؅$kYIP P"yD繪X(G$K"?O~_.V1=+lN'馝Zxي:uSw{SO=􉩙< J (u{ nZ(5O0vjfVDDsheg=~XoV (.y\Pm<o,>rFNxUD#,cXiF(mE>We vo; Ř,cgs+Yx U~.ʿlQ9q^ǟб>P^d<4Y$1x6"߿HpUuǿ~yp[4b4RdY"}5"D4:IcUL b=)>%1Ȭf;`m}F$I$GRbtF>,Q̗}4"1C \UXixIKyE/hrT*5r@[t70E9 we>5λi|1BFXاR>2G 3 Zk6F) w8XܩJ\GGyA0Kyo,ܱLFtwb@ kt9nt} AH +XcWQsU4I ƂF!?|@u$eyǏۨw%dðpTOXm2xO0qZިb2H/˕ Q㥕pPQ,d8Zs4[$Ix?tIENDB`gwakeonlan-0.8.6/icons/256x256/000077500000000000000000000000001466365517000157445ustar00rootroot00000000000000gwakeonlan-0.8.6/icons/256x256/gwakeonlan.png000066400000000000000000001010541466365517000206010ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsIIEtEXtSoftwarewww.inkscape.org< IDATxy%[^9'w3ovy6B3 aHƘ0ep YfP(4!epX%,a!,(`YC aY{V{5sGyVWUW~}]',vN + + + + + + + + + + + +$AXa'85Z~/?>݁Vx!$ϴlsg^d#֩"VxHh% ewSkA$ZkdG X +<$i?PJ/+栍B!w?"VxHh)DkX9鬟%y!(VXa·|?UG}iNS)~qضAgsPqh.Vx{ciO`88-[{xAFeofj}M On\4堣0y.hcWQVxXh-Mt=!)[t'Sv&hԩm/_xx|ks8&ߺ@"ll4H e!Dsn[1W;ZwKܷ~ӐyU"Lh_?>o<%x#/ּf̐:~{k)@həm]ШD;8'haOk[Cjмq>Q~?Wh|Ǚ XJB )xfXMF1f6:=/\wv7l^dGl^ Qt O>.pN%@kQ!9&ٖ uJ}+%/i" ܽw~p?Z4B?pL,qi9i Ӣ;׶q3QZ̉:`$u.^_˹&#??gEcEO*1@˷Tky ', ܼ{ zm&1h шz,~[^~m&0F |:EYvsV@*m4La<֗e(zPLZceQe!Bfܽk͂~ZAj^,ar]G ~R$遨h]ݾN!{ tRDIy>=t΋jݶ րV֚uU{GS_OK< ܟu:S/DJxDq0Se-F#DAN2}+σz,gUXU ̙'Mq!m p18h ӣc2!ĭϝ )߼4 چuP{SGCB"L{|:c< _ m5sam} i̼2B0NsDW;os4xl:kcP^嬲$9ۺPA Hmok/^N? Tz!iį/Z":ґ_wK7: C4Cl#0FW?GyO]` 4@ O&OOf,mtX*Ҍd-luv]hubEƸAFq8O'1+x /UcJ%,6'\K7JHUiX T  #Tǐ nq4O?~g?~mU28}s/Z!7'~kCLƏb~jwh;>--Z3; =XE|{䙫C"(,`s5l??2Vr4]~HڟL٭vs0aE"n7`<{-9?pQJGc`4e>ƱEɈdrh7?4}y##gsC^`[vT3w|-۠v.Bǁ<H^HeB_YqmZ.eBS6.!cŊۻ5_+;)9XbZL: RuXj߂V™Bm ۡTi*wGDQeNdgTcx!08{.I x=魎pj ~0۶ oAwPx50xAč^~PtJ{NUwQs}t7 Rܿ{F _}bE+ /}G"O)Bp}N|2 ˜97ʟ€dl,|GO <}̓:pJ+ZDB8ّ+]fdР!eNJQsw(̫B@<ﵞˠiqZ lIጮk'b/`::$c*4zezKNWH7qgMomJڣ̋I8Lfv <R4˟$~Ð\UL xpu'ل, ?J\+,Eˌ.HV_L}zCaY}?qe-m7q3=>cvӯ}γ B#^Jwfo;-tlNtmZGJ)-_/XVXg?oG?ew\aŲ[8Ne 9RdgQs0*zZ^ŏ?QЄPw-CXF)Ms?bk. ßMM >O7NŠVᧀB0dEa?*q11;e=[p]6+x#/ +],&;dvҚ3ֺ-l+]䣓4I7oxqgcW@{-㶱\~K@{Gslˠ.2aᴶc ''+t@b(h\ )Gglɖ~$6AKۊt`vcHi̵3_?; wlW`c#9'=x3Bw~S`83qǿ;d;O2}G1Ke yir?Z_r/DzLH)#vlot!}{6J?/Œn|@$&V9V.hPv`_tQG|2[ϕ Ow/2\eF i_YfRO,6ȟH&J%ڴð;=vL:nG Li}s CArFw"ӡCBYB¿5F^ t\Aeh8{a̕ax67xs?D+~Q%s0IHH@~*˿r p)I/Ht.쳵0L"T^xqдlFp`g/ 4粐aex"p @~Vk M5(;Nۗ>ϿRw~OZ #Kϫ Gzkk Ma7YX4>tgpUz~ |TWxax%ƥ$+ؕ_<U7Nu+םannq,}YڮTR)T?q<(3?Akke{,(=cBU40Mʯϙ>k-֡SCy2D:= $j IYDVBhLæ۾*Q4҉qz,_bH⌬1%3aH60h@%/8.cu?~@y3obiΠ>dRS/!XE4\L҉qz,$KHvfyAPNzxgIPy76z7"D5t| ܩetNK/B ;Jxbpt4[(,pw^fB$!́i`@)Զ:)d= l>*/J9+!Y liX/kU?nY[[ev: /SR^nYndQ-Fr64kzdYUR(Z2 VKe$ȣ֩T1u&*p L Np%SƠ?5̺cYmdPVI}s6B@A!K-y03ϯ])e!%M&T\~fgVei|>'+,6F&b9 TNHJg“KcCBu5+j"cQiZn3IU钦r]LRIg)%VQdm[nReU\%VkA @-z3k y-nx}viyMaXVIH'C|!St^&R(k8 /y"PaH||H\Sxt8VxQRFQ~VEa$}B ôƹ?}rz`Q/vl!e(=Dㅨlbܠ)h4B"И+C&@" MD RхBxWQӣ0(k!e57<\΋߯o)r2)B9YdA) qS_kϧrQRfa#]r.DUBF6XiDj wܤla >RsJ4TM  4ZtT = ؖiZؖl'bơF|nb rXE.RG!ru+=S=bRpa2[g]})sڞ1APMњTx(+f6}]S mIGFC봰 i335JA!ldXѪ4<˕ E(ɮ2Rz]4<:RS ApqЂC"Q-سq/Yu}WM( {yo h"JοC&I-eYN8Xl,$[N@+" JBhil$( #GbH8^39qp @ہeGc52S@`neh$g&T,Q'(=R8Y3a(n/lp L20oI$ycM_tB$uBV|۶hZtm_gwm:]Ng j!`ÌF{xs?bƓ0 R`Q\l0M7ٕA35(~ F mԇQi߷fS T_( yahIeYU"̀(4+۱i.N 4 UP)Ҿ&ǔR<۞䗎>sNÃZW}F`ASxJha+8뺴.-Xa Ĵt[V1 AL'y;<0Ðg<3߳h<; B`0}A)Z+ &RCh ӐһV2F @dBO .d@.*V& IDAT̜B{\6;NEe\mkW&3k:guV<~Aܿ4k~עm3f &d:d2hqxwy8,2۴~/b2^;-P.CTDA ؖEu5Y)B+K!Ub:${|qGT%(Q(|-.%I(&A3)# X\'2F!8`置P,ɝD uJ'[B`]zag3;L-&s?hQNW40 Ax{|K+t!wIuZG6BXi1+̽ވ1Sq5.JԒrXZb-'49ܲߓsF *θBήk؁F* x!HW=rBvn)ߠ5_CVGE KlSBGHafS1)q\}d}r@1 L!M!DEfӡ@4ظ)%i"&Bu "(0LLEmӶ[N=g _O:%4'<]&}F#c`Lyq`{W*LrN^+x(H)VKf)W4/n5?lll VD1 nbϠF5C%^| 0l%k1Tt藈bAKXTҚX .u8!I\:}e̎5a 6(E9/],luiIadowݧ~ ikRtJhxxX֌G;`]k1emc B+IM;I2T$0V(DHC5P}L, &I[tz/e ̮vf gzeo4,ݫ8v;te@7iQBZO7& 5am>S<]'p(Ti<I8?qkhnUyJz8 ^AyJ{c[^z]sJ*ޚ!ܯl>dҗ*orzq5~փ8] @ $L1q$fDPXD)PUh%0{7 2ZN{(wh9{@#1.s?D]();(,-5^^H$TKN̦/vv|h*j驠jB1$dEÐHoBi$I=J$&"Ua b>?M5c7+'#iMV*d6c6CR?hDUeRJʥD 5!m"O)ı|;\kmH!v $@e>4kE:ZIL RQ?#I2tbJ5 iȵ IDec/cEo9>BH6 DCWs1I 0o P&W񔝪5Rե@YSHglinVE04BHcڮ}8]MQ$_(pP ~J+ƋG|;*?|WX`8 $BT,8aV6%QTRS*uzR$VWneG׮a`;6CpDZm(st4xtxh|ʗ 9)dwUḰ y#LxHCvL~G.vBLGC*u"OR ;d{9_1 td2a:2ϱdDk3"Ex>'Lߺ"\x^Z* ]:v;MNtyZp},Kg>Aǻ'$2yɥB) -g/^5QdRk]Si85+m|gxgJan2o/j|t:MJ=X93O-)]0)O ZK;Mj4KNTtQga<Դ(QqPI &zXKk}K].=\/|,Ti{ἲxd2! G nkD-^"GM /,PO&O7g.QrfC%rY*A0%|8,^%IMJvyޯiRHUr0|iԮS,xIA輞bF_.Y2(]TUWǣkespZ}`w(-Q*mYtA^F x]PG^GpM0d`ۉc0'xvL8|uXRRspVV`]5zʝ+ i1s}81M0օn\VSLsc{z/b? R4y7p]$!:)I$0U)/۹#䭯dajfJcFiCTK=`E%32i:J|,P`u.K6j*pՍsOA4Mg CAZNUhsSa3]Y1^ru.Ux A%PjiG`#Ƴ5ͬGH:=hlK!^f4U&eٺvs4_FFI r \w \ ˄B~}Np9waXK.cwU`~k|{^A2OX_HRE\R Y^ee>Rs32YKs:˲0Lk&A3Olr@;Dk8:k<&B- yኼPAEhUOR2c!oۗ۴$ ៑F]nOdfη> W>ݥLCIuX]tpf/j )J$\7;*U-W4(lap6dL"kHd[_0HQMrRPk"UjVeǦ.@A96^V.evVzo;|~|>vRY,fv?[Adt6e}}N[sUϭt \prr5'6sP=PVoR.OQ\#Mgc۝`>F7\i9yY38<_(+K>/.0/+_@0 lа\'5JF=0JLeЬ[9h7{;Xnn+eRvЊ'@MSȵR=IGN&:# O! 7sR0V+gl Ee&BZRz(4~$ L\n9ZhweiUz{Ed"j4 -v.GJXHx4|M kQLɆG vx^uCV?o.:`Uw_q u|UaW,nZ|忲CgVGze9x0]oUϐn xduΘz_)q-¶]3@ Fid~17 C+[`funwj&Vah ,2Q6*!VdA1wnV~iٔ߱e=R6$DQ0[as1B5Oє#jԾf3Lg\$⊶1d6S :n򧢳JQd$Բ]z-6ֶ`ؿF<ᢁߌrb/CzqiL= [)S*IB4 yӶàqOv]+" 3) MDLK%! Cl6M5 kC^0z@^\S'd.Dr @ k:OV%Zѽah:;{!uv^xl~珈9* ~KQ[+Ž{ 秿z=ߣs<ՅGL)D=S<Ff R,9!UKYV2LXkL IDAT }،GJ)hHIXھ8vD{E夝XYvZ b `ѳ^3ˆ: c"QQLzGo0~aǡ߱xy!2G{FMG;{tD*׹zٜQ:4:k_$)rV @GYs=O]!m]a&(  C<t1uEg : k6?b͚#+(+FXtۯ1AW-;29 È(~GmG>VE(ۗLє(:htE1~"J\nUq!"kbYfRGg{y^D˛jLQ%30V @H>g9x˳rR ]TN8(RW0G`;qljF1eMAveo q.hSΐ^ac) y1~W]Ť'tiEaȝ;7vY,_/ ]|dK̀Z/m5M׷4 lfL{ dotU_יR0%v̈́(IեAɻ4*;OJΥCOy1"fA8c=F0 BaDd_Rbf-t4瞅Bwo@<+lom#$zqJRѯD$\E|27io"ă2vS2:=|z<XsBsa.S aX=a'tJZ-|]YEVt.K(Rs-¯9fsG P·}Ɠ]s0P AxA*H-[s[ 9h(8~^2$>izlF2zqFmKeJ/(8>C\ -qf}\KQn[KR{S `˷CT0[<.4|ҼGwX$q(st/?sڽ{ Oku*1وkܣ;!rk[9ۘFbt ޣݯƤ8B-hu˺k;S$]Ɠ# 1 htOg%c ![.Z^KrI.!9类wG"##zSӿFˌ_D{8f4Glnm7ع#tb?q !. C-h F<ЗG=F ̞!^\TC5w 3Et- kMh5ZNNkVBx0.]?=06?0Jzz6s<^[*Hf9y۝Aiᨸ8ͅze-D v٨Pn`:EimmϟC&Hptkğ8(gJ fq]g%Q2!g+>yFuMJAӲpݦܤJ4\m/^NcIRwIR7'+lW~lWe._3Nth\V&؀̙ΆNU>i[Kq\, ,f"[2OB$B?L]0,|> OR}4TP%I K8u, 6kkױ6M6ؖ>t=v/]~ؗ¨)VŎ]<r!M'89ܛy\7u9?i)fmۥ\cF67ǚ5F;Ҋ+پ~id:̵Yi3E:5tOiyYtHlfϟ,<w^@@IIZFvsnws8uklmN}"gxd6{xxG#}`o([fB_,B̃o>c:+U{ykG{7I.Rb[6V7]aR2l6Z9Db>LD|5XIM# D o\ڭm6qܧt\y.;ӽe7B!,ugؽK\y+7~ n3%%I}j \MPP峬}i\\`PcR3) Zf6|0 LngO&i; Zo?|J-˦`8>̩p4z>6f`4Fln\Hnw=λ~08eTQLmYEP&.䈽en縸}s[\?Cu ϰcL>C( [ d™F&!<ت`ݨ "cc=I~fVxLgC`4 ` v{ 2 .C$F#0f8:L%0pn20ӂ ,ALGba<XJLf#:nQ|# ÄHR_BK-H%1B 4ۗpMm#dbQmz/am>(qvz%C ]dzѨxm;:RxnQO N3JMDi0' u;ض}#݌4҉ rm|ptߟ"tڽBo4G!AE>i},XpVKAi_ :.o!DvY^(z* Ax\ngKYr$PNAt e݈Ѹʀ!3nwhMw G} LA!&\n@Lfܩ"($BYz  `a̋"fscpxh1y̼2?W:X}ggOU|j-A+y7t@"y<- v 4'@8O, !,ݍOS4k!j ,XX_˂d,$a8!`axrD2)=,δg, 5TdN0 1M|xQ ـc8\})q Byg)όډcB,g 澅 rx^4= !(KU4rt53 -vZ=vw?UNb]l^^:4ʾ j(w+xs/חIJtV9&Pϗ3Byͣ}ƓG s&tN7A\_D299]ɬMQuGƼ]fs9ด&>RܲZe9:JXJOYDv׮SΆ9p(SX4FqH߹X_3QS7: q@uSF#>he2}Z.eqOv}ȶ7&s;)H8lFS}#H|L!+ @`ٰVK h]/F!2yޘA8τ[ +i%<''Gg\,"4J{R$<(|,+NY^l#FS,$_|DT344N+WbzƏaP>{PH8H A5~>djW:L< ӈO:2AH68J;e:0O>w c!dm On/U/ "/ o]$+ APbYj^ŮY(<6 r- ƄhNM@E}(xYh<_"+0 0KKkZ 04͵ețFPD~#<}4W6.'MyP:6 A{)R]܀dMbƄmYpo—? ͒>GMidzϥ]MDH{)|R$30s2k$'/y+"Έ 2<d`uȶhv?W:9W-N+x Ƅec/_,tˏU@JQųҩCo>лG¨ q@@>5/o?,5 Xh1d4%:u5FzY`lmq~^> Wބ nN<+Qb(/ّ.ƭs/ h _3爛Oa\2e$A@CWs lLw2hZ_ՊP&j ys;eT@~*i/0Fo+H@W~0^ޚȣnv2[uj"[]*Bck ;o^Ɗ߬q?V&܆2 À F85|J)Z'd JbRjb [3xpX/KFwCo!c x. &2^ㄋ^5@EKf1ggs%nt:`>io8LB 5|(Ja/D $aN |{V[O}x(!oY,Ewc:!ZF TVQ&ܤyF`@>}%%Ŕ?ܠ~caXmc^8L? VGsm4ncNhǣqO Yjදl]M>2s=1t1 ᯲ 9"mFmPQ|@y-g6*-LJJG1 =|_m0EEʀZ[ ͫyw5hpe;GnciqF:N ɒՀdCU6 Tfg҅ycg?2ϧ7ht>uSe52t^i$^m]ѺV+qB?զۉ2ɯb҄E¿R ,d KF48@!7%ɜ5@ X[p߻gf l_ J0U)99z[ ov,O~d]++XN:&[\7N^ 9NiRT_aPꌷ=@X@ NmB`ۛ8͋BCŠe=-;`vqV )uן4/ah:KE2(#_% FNL|{k'wm8LJlw gxx'>wzwg_}/")>ndn4.)/c!CzH饑aa#fXv a]Vj6+Ϳsް$78Nn(CxyA̳tvGVPR*\>#z .%@NmW3 ew#uܽI)+͟{ާ?a( 7wfhq򫬯?=\ɿzU66ٔ>9մ+Ν;˅0 y?c6 5dt/\z(3>F|2k0D "h4Z@B7/ez~"E&)DUw5sFRr vN&[[/dgQܼu+9 VVḰ2G 0Op6FXO6VvRr}f2 uNQg''xn ?Sֈ[w9Y/,ɐw+}>\ɥW=d퓠MqM.]2?|td)vhMv/< c _3qxtȰ6 IDATޞ {=!{)3)$L&h>s2> /ApA .yJ'˩;%4zdF+R^dh8곷lӦ W^/& 0yT z횙0a8͒| Vqq򁔒?uC]?'qF"Ѧ$a*n`"Ÿ?0=\Mc!2!|O*MG2T/nu^8K]|}}ew߾{T\Kcu8u: sn}&KΕ]:6~0f6;H$qݴ.B?Iٖ!PDӡ@msQo _*0|O%0lAe?OfLqn碱W*sfwc~R޸nDžf;w4b qxګƙ|=?_^ŋYR~~>|F:|4PѶ_#9W@g!/:)fH7[WX$a6֗飇l )jU3Ә_U:`6׮8gև(@+8`d2Z ek?~22L#L( e@]T)q`"%<1_U=F_[Bg$!MnT|=[knqV|>û9r'1Z?W0fW<;X(b eȍ"[l6M5bٌ;wucFa(>3 u>Gb?HȲI4bF]3Çy~ӻl4|}O*^Z:~Q=Ol+ݻp4ixɴx|Oʓ>'}SV_` y\H?ϣ7wSh6ӯ%)d:|JJh4`$Bpjِ߀GiBJ<{TT>7G:^.y[7+k> ?0͆U0H/P_*gz~*G ~a0`p4ۯyg;`aLC~AsM(@@0d>wެLC~AsrV"R[}?ǣ_ q}nܸY+Te $gx ˲q&D A+YC<[ &_ GߨS:\twOn;p¸=Fߨ%NJ+,4[g{F_M Sesr&4X)x/S}ea|>f<9d23ϐ>QVR2;8@B~ÿ϶7s&wF;Ѻ)´}fԝ;0ZTAͩV{~+e?SNs+ 4zfY޾7/_YUiTj'^XN$ ^^/ޣ~Fr B#AL)['ߟkN|(݉,md,S$bF5{RJL&:.m)w?/Ͼ~;pϞNcFJ| M3%3(4||grXiyZ q2>w6G4` \%e[X'c.~"03K0B)+{Y_ /kñѩ<=ǣM޾|7.[PI a;;6CAAJpL ?;Ѵþ)JټB (,j,܆պ)o/o榷?$0V @Њ6`#,)x0)=d8fB̃o Aduы^jozN64Xf@%/tjދD pd;߄W/W>Wpذ>?"M0| ,>f%G_ I}+\h2M, o Azz2=ʪ:t'z 7 ٫`GG3PK.=Z{KdWP_\I  N5~]}~t糗x|ZB,eX?~|pZoWj6+7jT VvpO4vg*,>%:e1-a4^qT@Jhh~?y[!׶S!SB~t+:]LkWW"o[~[JA4 P#oTZ.ks݁/yP Vg#_;xvA`Gu zL&BP 9J*,,XSK(-K(wR5&/N?TWu:wy::so6Z{ll`g֟͢7Ft 8tb2w=墎VDn/$qD} tsXqͦ qRk \'%e˄_ò5~CUPuVc~QH+9pls ;. 2Hl+DCuy9fˉv.]70W1[V+Z: Hd2մ\ui%f-)zk.f(7_t%A@aӐT5~N'3Cݵ٨h?}Z_F ~u姘NaA}l7Ǒ"ÒRc{}IMXX3n>2֠s3~Fm@LQ| ll4iwl4~W4`p$K5V 7\}kӤ 3(o6v4Ű/s=Yl_=8N_D׷z7JOb |汿o`؟$~9::t*p_7~[bs6̿F#2E@K8;:v3kFfc(w?[-p\}77 TqJ2Nunψ_vq-eι|%g|)|;?)/ig )qR7!W`B)/bl;O.){BH^UzFN [KY/ 3{%ϯV6kU'4o insZTt]fJWs3 hd4H+=-´[1(& @h}괝(o&t nr];53~`cF ?EJ_a+SCC3.3eV W9_j:1ʯ[׀keVAvuWu"qN_f ҾH?xerD-+uuN%2n_cI׺z:ͯ}EV` >8c[ h4HXDζ 4 4kr2@хMc2] ^_ :i`%Oilk>DAU ڧLA?ķ=og@_w)+/ޞPg:8EE R mm@BK/Z;)RFKG V81 .Zض"Jݮ+#6 % گ ~SY_:Mm_V{IYAc  8v 4,f1஁_P ,#sePBtw#?O#i_7-GN&,j?et\(#O~ҩdgggcәPuTBE n~h@O+4~ǶRVH€„˲rAL\嗔DEˎs},\W 3@/gbXX bKF, P8)nڬq|iU|BKml[Ԁ]|]cP$5#z$9: YD4xL05O>$/ 4-{P4 QMQBMaMB_~6D +^2ڦh"ȖUS硫[B5hy~ACW癃&~KDH/M`۶ݬ]VAdAcKCS&OP? %;0^(0V2?#G#&oLPp@'OA3wlV#]w k)W2z[ hYřQ"U?J k-h_ ǠA-? [vN"l?|KU2al<K7=?+U&03yOB"WA70 2H [Jzrmfdڐ c @D.NB2U3Q`qѺz*s Y(6/"^t-[KȊPaMh@!8-h=V3~ux6 "7LO,eb!7LP)'Gf D!`6A;tZ) 0]!Naz!X49B'H0Җ 0" */dl!Ϣ0fğuLgW0 .߱E-~0Gm?ed%T4x,&b!!k1nqWi,ZK]  |P"dthDB, ~Kf2CKv=~H,9QH-dnA2\ $pIRHҲd k+ S8~;dd1H2>VY"JЗPb6e޼rXTY_y XӵO?5 e"QG,u TF'̺yBR\e5Zsgu8򤏓Cp2HQ&&\,L=e"³'W%O_/惀a1ܗ H>LH_$F`¬PsY(RRs3{ꃺְx5I%Oϯ͢q%KfEaOW9II(.:) ߣԡ 1 ǦZ_G`ִ5XʍԵnB[~e ާ:@S K T}xE揿D"f2 xeZ AŜ9a^FP(yP,C{lXtAUӪZR_IrZ-#qtoc~y5Z1p{YV' p .bYee*PtjI~Ÿ;2 =SUބI5˚ҥRGr4k5 C_-+6r<$)}/jp L*Mc_\2/e Zɨݑʽ#p"I0du%;^FW*hQ):Oz/,Z7U깩Y9e75,#RyL0 6ՂZ%hA0V+J}2)LeєN4 צ**j/zZh&ʛ|,)WoU2*@Y 8S|7񖥕 |r<*uZ&MEie``J+j[Fg +:z+'hWO-|uY"pPJ{$ҏWe!U@2ό/:$B_G@@O"L˄} V2aVtPV}PINBLDU+Ғk +z: UQyePe&a6ߢE0;=o^^d/^f֗R3DMe|z2[W : b `~qNKVߗu@Qo֩4 ~@AM[WUnz]ШJ+GyIDATO&0Q( W;ɧ~(\]zY@r_&z=uS2VC8*-3AH)m\^z78Q]6}c;ZC/Dx/=g߮_䕙c>O:6O}݇ i h!!R~:W{dgq6rS. }EC,P\b^ U$:H4q>3mv(fCH.FcJ y% %e8cT[R_Z-ti+IGua!Yǥ +3Tt .' "|`? LV̞/w-R([#7׺BN8D82%@܆ ,,faqeE E<׻݇aZ}ǫNgBC+lے21 I\>a/#y/t}2^0 .Q˲@Jㅴw0Pֶn(0vO.+kk>B$Y.]ɷ%:h YTRoTa-UMmPw_s'pV/⺳1Oo]cYT0LqFCZނ۰Dq^l۝4UJCOP|J_!B.oިaHeElTNw:S.-vꕓ$u'tWNz?,K eJAffg((Q'Prmx3ϲ>|z xC8$$Kl 2AkPmFXVVӧX(Zq' cR8y~#5* WlD%L@J쐖#RNe(oI@w;}ho7h \ ys,9ro׮ jRH3Ͼiڝ,;?bJkjD|l;~Bvlp, 9t˒8\d|bAѝ˞6=.aJA7ov9 &j7ˏ7Cra:~QFM: 鑶3mC vĎqQڪMKJQ%J[ZPԪH%)Pڇ PE -Pr3$Şx<ϙ9g}Z}ǎةiZemW>ĩl6svjs/Lɴ Z^ͥoz/:cm0i_2MD$T~CLҐH$z2w2ħ>eWZH9?95V}̹K^Do\XXi6CVk/\߾`@|3Oqs@[!JK"׶v=PB2O4La'ڪS?rhcmӏ׾m$?m?aY`1 shE=^\ZL#~$'kb[o0 ÝG.=o2b;jƭeRD.\\X t̓_ٶUjʰl,vVy?.~8[,"\^\c/d]ZZe\|s3āt:C39VZoO<ٻn<7`0bZa``  ڱL-*"uy SƊei BƑ0@w`a6/w{3!wd?>q[%Ġ{㾠׌T\yd@iǀI T7MN49q <mlϫ!2cK\nce"cMD,HFǧE&4ةdBl Uc-Xʀfk;#G2;}轼ʿ0xIlS '"I[@:=D{r1JtzzKUV*ζ/[w@[; :LhAp "B Xn"U @)yw@JK!X[P5jQ\wVۡY[b}eeq>frOwI^8u3ꬮo05AٳuE3WYր@h_wkoD!vqnR*1czr /Q)UɁ]KPJQ*ROrp(;9,Rxbgw[ dmBQ8DR/^l}x|VE*"8;_gLkV{3|Yo n`ssQodqmj( $JʫnU\Bl4QJII濾g63i G&vj]2pRIom/vjɔ)縼x%R]J @ʈd"o=gOgI_F#ht"7Vy"h)܄J9(B2f*?:um[ƛ9#$n`H ^4͕)&FG㰴$i062:lmoR.i$i0Zk05+89a̓NeجW%%RJ,|0FH=w{8v4'+s='Lir$8?CT9q8#k}4cS-.3=g|_mj V 0 /tJI0-&8-|M 0$)'xc-2Ҡ]B I\XZW^-dU6M<ۤ P:^M.[٪3<4FޤA9 ƭ5 ,#d\If#dteHw0LI*Lk>O:؉M,;tGS|?"URZMw?i} ĚMLH+P'd!nE}b%@yuR,b;ЫSHM7_iEyr%#=J%ZL9yx@R^hPHݜ)!\9 1C&7\]eG)(=M1?0~͔E%lcؖRFsN}$+T I ø5 Rmaf0!l BH.SFkf1Lgo\6%R$kMȤs{חWX9&MpZ % (>B1|9)[{Eq>nFW`qiMp`rE0dfv5ssGbscH$*PٮZ<{xxeE@P.UX\ZGY[[eѠRN2DM.\*D|> "סݩi.2 nXlۓogz2vb.UR="QA78ue_]A=78U6Aa"{=쑊vfs'sk.ӕ;vCgspq3pbZ8~ĕMx0;fHF~h~qBGitNs`KUv]&& <FF\G5K RXL&7IhiILӠTqqXbBnaڭjtŝ_~QgF-!L%mK:-&G5P?.25尾aR23d}է'8|$eZ {4P*k˝n0Q3|tpЯ fl"аE5)m'G"09!LtBѠՌOd0 B!dfCL9LMR(XOLBC !rQ.e"fLL$`468xWAm[35et"TJ29vf!<i64^"lBryM,knB mC$q$V%NSx^<贒8v v±4L:Iz(& Sxդ>!<܁2^'ov SeiXI%|QP!4 Bd&ϱvDmse }"mI }f/eQ ν'dnQ+P7iyPK_ 0nQ|V}ػSqERk~s3{ߌ~Z#@NM[޲ 0ÐN>|_)u\/u~nd&>o3k7^A~?=0Zkur%%_1IENDB`gwakeonlan-0.8.6/icons/64x64/000077500000000000000000000000001466365517000155765ustar00rootroot00000000000000gwakeonlan-0.8.6/icons/64x64/gwakeonlan.png000066400000000000000000000142111466365517000204310ustar00rootroot00000000000000PNG  IHDR@@iqbKGD pHYs9#tIME  2rIDATxݛidu-j}ȑ8\"JHd  +ʞd'HC۰@2$%۰hE$E*5$gtw:U]𪫫{z83$1)_rZk= _lNη_S_n4xNB K%͑rG SSF^L4Z.R,PJ.^p챏җfשջ1~%eh=!sl@6Y0aSgfWY4 bvn 0GPR?7[keϜ>o'r&gK"#[_ %LIܮ!:^H.mD+'񉿛JyczV_aW go}L" ?ah-ޱ@!0Gkk ׂcXX duJc}4B3)KI#yO~!=Zha`p;o^?/wׇÿ8<2O@;qh{๽ouSb$@q,:~ɤj{iEd3(XTs=x`zfI㓶M J@\W^GfE).Clo. h ޱE1xujSD>:Б z]`oyI(<$!;h0'Yֽd^%ZIkoRETU:aPV<b֪a@fmJ,#Z6Ril_z}I8bnv{ /$JI awt$JK=MKB[[e teo4KWXF*E)MڨtPylk 2\(4gH]r"}XVR F :?ށX& h%Z!кȣ{ Ƶ LK.Q 4.]fw._Ne8y7o~z v;UXLTy*2+73LkoBٙ}6GTڍ7L :[8@ h>xsٟ P Vjp{BJŹf~f4h[T* ~M!_+j: en(A^f-RDi~/и $!aC_O .\E^~{hujJRASPT͝X&JO} /tns3pc2Xba aܪ5( T4Ds5(VNn•(F)*Hq v( \Џ@$i>՚yۙ0 # t5:J]gfyNys<Ĵ>O=$_ B|I7kd2yqnQp\`nn'Oi|쯔/mn][E88,h+zPbJ)̻p@n]y@t_oj_"c2>6qGuLnLOGI0^vM0K FSy 3Y;x碂d=*CRV6j".KKK{[8i!n=Z:+a*CJ* Zlti&R2SdRJ̻E\gX߮ #M&\؀u]0Q:9/ H][Vu4B( o^ʹoQY%>K~(yäJ'I7//LP;"ީr2u WB $"hv~-8NWA6n! lҒV{; mD8IubrOѿ'8QlEA&L+w Je81zFuh40NӴHt:uL&.4fM]'-ds2EJP{BU{e}"K}k_t7^h~o&0zFwĮ UƴRSO%%{w&ƎNhNy3:ZI0űGU塔jv2Ͷl.Q}ľ0+\քOh"Ԁ,_籅m.CX=#}i|ެwIi s.alB0)+"dґZcPC5xP 2L3M/3V 7DܾΞkEhց T\fgǢ{hK.Kr?7:T71-=AwE7O86w( OU~/Ht?>( {`hHIdJK^[)yh7f̱!,r'ly.W6Rf׳S,30>%X{RhIx~si6I;EN{EZ ؏ }qAgp+5q!_8w]tXe(:fv'1^퐶:ZVĪK0~-qO#RK%H"zZB9s!!6NqB8X0}l+cC ê`Z^`Zi7^@#N0|!,mUkT C^]x6h\_ ^MG'Y# #}3nuyWט\@J ZiFF)JTז L6 Fzٹy0`y-l3,Rju Qq78GHE*^ݼw^wh1T0LWv;M8;; `|tnjuNPbu]bNkVWU鴉)eHHF4VnmѻZuL*D|%()lle335GݢVFkG()KAb[6ss4[XJqܯ ejz|}sOkuڍ WY@U:;!nZ|O5 hACh2ZC*X(Fh cc&ZCei\~7]:"D*~/-c X1LATȸE (P_)CZnwIMo)^EO}(a8"A!4#VA= +yZGڜ ܫނt/*hBv+kic~G@W*MjsWtߋ ,I.axҔ0WV\F٦mS·IATij `mPoC&mM,շ ?H{!&NRȏfw,S0חڠ2azj![d6YJee06ex01&e'm&' U0YF-j1ZXi\vHvu|\ܰIV[ef)F_HK+c3>'1pNs iF2d2a`'rr&ciD'm&c9 6̑Ylo]ʒͦ AE4yO$>(L LN,S)U ig~&E>E)JYʥa槧<0' % 0[.8?-`a1 ez>RB${ZV{nc,rsDŽQ҅InƬW|OZõ+loHEpF?-jKu҅WE7l/cl0(Q~oM4&99>WRo$okƝo,Ҁ#::ole%׵8 k/;4CkzNġe\M(;][1 c(;D!>IL&#0w51j`;z'@zq4 }}1rP#0 nApw`fQ; :Q)}kmIENDB`gwakeonlan-0.8.6/icons/96x96/000077500000000000000000000000001466365517000156105ustar00rootroot00000000000000gwakeonlan-0.8.6/icons/96x96/gwakeonlan.png000066400000000000000000000253211466365517000204470ustar00rootroot00000000000000PNG  IHDR``w8bKGD pHYsOUtIME  ] IDATxyd]?ܭz, /Bq,! Dl%1"P"8QD-/3gzWqoݪz^/3=|[nֽ-Ah?07_ip_;8n-ݝE Q8ybբ5n*b4i~/PJ]c5ZFSW?-vy%7zgtŀ;fG:{dA"{{ .n\>vݿgϞxޤw7%k3CIW(0R(A:8| 'kdscV>ؒ*LynG)a7vR;rYl l}Zk]G~:aM2xn ܉I.~)Dj*iԒ-Ǵ\![ozk_zS7)Vg(Vg^n4u|)@&czQJ!1 @k_~:5ss\AXD+[cZB77 BcJ! Q^p,KsfYfYTK)s ?WE?];bP a Jiy'>qT t\p"ch4' ~wNZ2&{W}9N?<O H3)3Tff0,b"t4PgWf#01T.!_{ϻ{ޥQ:돽_3|C3@?oRQ Sέf1a9_9!CT={f+(cuev'Me(PvαfO,ae2{>MF%@o:RMCcyFPXD hk<7Jߡ zwgW*s30a.EiSXw1c+K")*rCHiW4G?u+{Kay&`s6vkxA?_r*DH^otvȱ}Rb-(?_Y}ow6]B_C  #AƷwk[/,P͂t7pcka>3ߙ=lz\ՋACUenw~+ zFqzIί=$)B>N (>$Sbk&$|BϛrO<ksfqr9:S-:hiP27lysqoLg1'3ex筗?RBk숀bJ%"}(쟔iR;6wKUr2~ht\FcYu:[2RSPLYJÉL'׆gыʐ\h hIqsf߅gu}1d탏JR=@wp9,ԾH 0 տoLj*7R;Poz͏͏ c #( <ʓ͠0_H#JE414\y7nWW]忠Y_7pm'd2 DɳL:ZCyGLӴAǵbC" zX1&IԉT)( q]0J \E)0Z>>(RS o_? rFB{,Nz-DjڴėP)J!P UZCzA@^'R.Ji4 L# } Qz(|F 즾?Ͻ[X#!(򸞦W(=?*ze~F+@$8 bfJuPϲT' WjؖzfkeR>A貾e6lTcg1M B0TfZ0 ,3J!>s[SΗ໊/& Ơ1W '6/Jc18S.={N+P.e' Cv8CYRuvJx:~o o{?|?$v;Fg{n_~<R|B{jxݭ3sxtR1YKPp4,eRpbR GfH)N|`2 ”nR cP\"ZkcQ.'\n~"uXnll'y4~*+7jDQZ364Ml+ad:%*5fKKVk}tNzH|  &S\M ZS7 "@a%y1ǰ JRh ZDZ8vrD0YBR*oB5B6~o#0bZ@aSeZ"swG`Rsbf}Z3p=zQ n&3 M/3Ej#v@PUp'YXXdaa^Ǘ6>A6K_׎d#J♟&>tiF^q*b ^.غ̦ ZS,fk0pxq>)gZ'N\LBW1)N`zEIbdKC \<°~ ej6 /#)lu< Ě+JEt:ur .O\9O\ZT:_YdK֐`)L8×b[uxL4<#n/S*&؆.=O~NfJ%zE4`",f=,çY|%#4rhghtj5ALXb S4! ݚP$Zژ0ENFSCEI\A4zr/_{f0賷&qԔmcCd1k # 2etL3$~2Tyݫfqqs,.xǹ1sD2A_;>mᅤAB 1Vx۽_#k (f]$ niڸm(=/Hf> Jx(-PQ}00M`9LCH40Bjj4*Ft\'i(T| O}^*1}a~OnyQP(T^hkZQDev7CrMNЄ0Q'RE(:Ņ&@m3iq_8VZY); ^|ߧlRB6]0Ef08T3KEb=D3)ʜ9zf ako>K&QD!$o ua>4̉xp5qR|:;Qw~~6< 7޾An133CXp::)-rrKK'XZZz@[KxL`qRÂBG1%=^.usy|K]lrbc=R),rruffv۲҈d(O`Af'2Ha^?ZW^T 㢊Vn?b>~G4%R\L8)*k#X^JbF y4̕TΟ~,k9ubR)۲&%R;TJFBAxXB1%ŋhh._[emg2f֤]3|ͽ1Dp5/R#e j?+jB31$x+#>{kx~s -֮ͳWoјq% Ll߸88NB| Zp`)D*B2r00͐k]Z^"'l 5nʀ!}M}hv ȡAz{dsqc67voo} x{#<>ya^#݀=gy_KTegA@@Q)8"@i`'4VxOo}Mu:iGE($E$Ou@6OPDiz4RH~0j%'S?j\2? .ж" Bra+k w >˥7Z~fК(4>YP(2W[K~z54 TJOtSxHfPg,;]RHwIi),`>qxi8iZj P@ 6}r J v524k?崱eeԀ a (qȘFJdIee(pQΞ^JX{5gOb(n%pċ;<d-W8杷v{8{1 B0fK4^\-jhӍ*A&BseZM^@E\n &-$1F:ᕎҎ?!@`"4,DPıJTQnsB'Kb@y14>ٳלݿcx~ pZR 2 -b6^ # i˔b?Ћ߃T(΀zcNw۶ZtB?9'?p%(?`w.]W|7>ɓ__\Y A0H4a1@b_Y }.m/1e+C@&SqVUUQZE!arb^O2K|ȩD1bS(d1,aJe4'Md2{Ls^8nJ59v*G?i6RBc,A X4Yټ3~rdDR^82,s9v^8')Lxlj4MjىF&縔:΀rES8bOзgD(0!{-m:b QLy[_|E dvk+Mh4t&fbk\ H[㎓Nw{Dd*u%d& ;c>V ìMJY|wySIrJEm<=3eD p/$|Ӱ;vdtL238R2{tևelFARVPIW2CiDaӚ:8Wz=goW9Ij,9l49ė"&.dx ~ RIEwxjxw:qC _c1}2a,"FB~,Q _~3:=Yn uu硐kZ>FGrf0l!Ɉ)j ,1 SbG). &k8:,/?Jy8]=q)*B,&* O^?Fiuhwwql5q")ѵF†yDBw?wOraȕHE@QyK I.TX94XL>KU-MYGEq=&t4K>W0T `g`gvIĵR;|RB:=@&SJK$-ðxnQ1VgG&ӴJ$uf_4w0Y"1AAԗuK~A 0>+ۏ}}V)͕49u2Fj۝ֈ hYY[IoHsςtvvvȥl\+/(EPUڲF+; n`UПъS+ۏ޳ y < L8"ߦɥXElls 1xŠO؎C\_IŶXgi4w^pGR#:uwݶǘyH _w~+x>K?"?豷JR)~4 RIDAT*AF̩s neffb\cmm ?|ܹDmvvwUE~^NH Mw4? < ?8FE}z/`gNGOx VR\ic_A1i/>$ƵLHC|hJ)|^V oz7xg43EaP~O_ 26`ES 8l{]Fc&l, LZV0zYqD*'pנA/-3s0[hs~nb3eu Mu{ASfuoյ8?yS+stc(rաRPXT*N'JRJJeIa̩d(5rYhē2!X>U0tJg/; #3" 8/T*I.'p|$ժc HSlS.۔F<&Ӵ%cHr2X mgblIm4 ̂Ǚ|h YM>WmVkM\6!!T@V=lE͚d28 %\~ls9R9fZ&HU!e:& Pr9\Ͷ$՚a Wh}S/5?a2\΢R8iHl[{BAĪLOۇl֦\ɐqLl[bQ(T3!'w5^?fZ!XR96h<J5C&c8jiHR0Zqח1VF.k6|lǢ\1Y2fυ0+qmƸ540 0ZŒ  \`MeJXuBc\Wy{,K⻀Tg1kűAkQpy/Ћ?JaQؼ1?HClRJg2PDx.DRU3D.ı0i>:UPF|֒jmrj|?3~=BˉQ C0eL0  ƶ#o7H9N|@c'p aapd"< b :R+f0Mʑ1Mߋ}җi ր0 a@A`qb Chy m0483 mUIUű Q8f>]2GXFL%1el)G8VC{cV&cw&kWA>e(JAa)  2œbfdz&y/JN`=L!WLOb@!ua2K2J19;1G*yLFATr&g&,{P'TKEN27[=4'Ok%p:LL9m[j9Ea3OL1RdcAX{4?:mA/&Z^ϣO=?1 z,z^cwGHi; Rphz~cO Qn}P ߺ3w|ㄞ&S5 fɎن}$42.F/8v{a;7ffs8:Ofh1 B4&31 *|Ӡ[3`_ƉaN;.avOCijںZO1O0KS31I_CD˒d];b3p]BqÑclRaEuFi~ C)ĽfDz?vHN6oCƝ1e8%}3GGTcvt!$9u%iKz 3<`"OۖD ~xC7CDW1Bs+8=<@*3~I:9%ĞFpy oE|q\&Lu XIbu&sƉmނfoGoƈ117<ĔE݌7wo bIENDB`gwakeonlan-0.8.6/icons/scalable/000077500000000000000000000000001466365517000165515ustar00rootroot00000000000000gwakeonlan-0.8.6/icons/scalable/gwakeonlan.svg000066400000000000000000003033201466365517000214210ustar00rootroot00000000000000 image/svg+xml gwakeonlan-0.8.6/man/000077500000000000000000000000001466365517000144435ustar00rootroot00000000000000gwakeonlan-0.8.6/man/gwakeonlan.1000066400000000000000000000030011466365517000166450ustar00rootroot00000000000000.\" $Id: gwakeonlan.1 0.4 2020-05-04 00:53 muflone $ .\" .\" Copyright (c) 2009-2024 Fabio Castelli .TH GWAKEONLAN "1" "December 8, 2013" .SH NAME .B gWakeOnLAN \- Wake up your machines using Wake on LAN .SH SYNOPSIS .B gwakeonlan [options] .SH DESCRIPTION .PP .B gWakeOnLAN is a GTK+ utility to awaken turned off computers through the Wake on LAN feature. .PP The machines to turn on need to be shut off with the Wake on LAN magic packet enabled. Linux environments can enable this using: .PP ethtool \-s wol g .SH OPTIONS This program follow the usual GNU command line syntax, with long options starting with two dashes (`\-'). A summary of options is included below. .TP .B \-h, \-\-help Show summary of options .TP .B \-v, \-\-verbose Show all error and information messages .TP .B \-q, \-\-quiet Hide all error and information messages .SH FILES Settings will be kept under ~/.config/gwakeonlan/ .SH REPORTING BUGS Report bugs to https://github.com/muflone/gwakeonlan/issues/ .SH AUTHORS .B gWakeOnLAN was written by Fabio Castelli (Muflone) .SH HOMEPAGE Home page: http://www.muflone.com/gwakeonlan/ Source code: https://github.com/muflone/gwakeonlan/ Translations: https://explore.transifex.com/muflone/gwakeonlan/ .SH COPYRIGHT Copyright © 2009-2022 Fabio Castelli. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. gwakeonlan-0.8.6/po/000077500000000000000000000000001466365517000143065ustar00rootroot00000000000000gwakeonlan-0.8.6/po/bg.po000066400000000000000000000076661466365517000152550ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Bulgarian translation for gWakeOnLAN # # Translators: # sahwar , 2014 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2015-07-18 16:35+0000\n" "Last-Translator: sahwar \n" "Language-Team: Bulgarian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: bg\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Версия {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Редактиране на машина" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Добавяне на машина" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Липсващо име на машина" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Невалиден MAC адрес" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Невалиден предназначен хост" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Сигурни ли сте, че искате да премахнете избраната машина?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Изтриване на машина" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "" #: ui/detail.ui:29 msgid "ERROR" msgstr "" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Вмъкнете името на машината и нейния MAC адрес" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "Име на _машината:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "M_AC адрес:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_UDP число на порта:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Тип на заявката" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_местен (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Интернет" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Предназначен хост:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Клавишни комбинации" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Включване" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Отмаркирване на всичко" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "" gwakeonlan-0.8.6/po/ca.po000066400000000000000000000065201466365517000152340ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Catalan translation for gWakeOnLAN # # Translators: # Adolfo Jayme-Barrientos , 2015 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2017-09-22 11:55+0000\n" "Last-Translator: Adolfo Jayme-Barrientos\n" "Language-Team: Catalan\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Versió {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "Adreça IP" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "" #: ui/detail.ui:29 msgid "ERROR" msgstr "ERROR" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "_Adreça MAC" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "" #: ui/detail.ui:191 msgid "Request type:" msgstr "" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "" #: ui/detail.ui:218 msgid "_Internet" msgstr "" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Dreceres de teclat" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Deselecciona tot" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "" gwakeonlan-0.8.6/po/de.po000066400000000000000000000076521466365517000152500ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # German translation for gWakeOnLAN # # Translators: # Martin Riemenschneider , 2010 # Ettore Atalan , 2014-2015 # Robin Schneider , 2015 # martinum4 , 2016 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2017-09-22 11:55+0000\n" "Last-Translator: martinum4 \n" "Language-Team: German\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Version {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Beitragende:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Rechner bearbeiten" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Rechner hinzufügen" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Fehlender Rechnername" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Ungültige MAC-Adresse" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Ungültiger Zielrechner" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Möchten Sie den ausgewählten Rechner wirklich entfernen?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Rechner entfernen" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Host aus ARP-Cache wählen" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "IP-Adresse" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Hostname" #: ui/detail.ui:29 msgid "ERROR" msgstr "FEHLER" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Rechnername und die MAC-Adresse eingeben" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_Rechnername:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "MAC _Adresse:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_UDP-Portnummer:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Anfragetyp:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Lokal (Broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Zielrechner:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Tastenkürzel" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Einschalten" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Aus ARP-Cache ermitteln" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Aus Ethers-Datei importieren" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Alle abwählen" #: ui/main.ui:172 msgid "Select machines" msgstr "Schriftart rechnername" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Rechnername" gwakeonlan-0.8.6/po/en.po000066400000000000000000000076651466365517000152660ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # English translation for gWakeOnLAN # # Translators: # Fabio Castelli (Muflone) , 2009 msgid "" msgstr "" "Project-Id-Version: gWakeOnLAN\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2013-11-20 10:36+0000\n" "Last-Translator: Fabio Castelli (Muflone) \n" "Language-Team: English\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Version {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "Wake up your machines using Wake on LAN" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Contributors:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "Project home page" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "Source code" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "Author information" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "Issues and bugs tracking" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "Translations" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Edit machine" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Add machine" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Missing machine name" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Invalid MAC address" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Invalid destination host" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Are you sure you want to remove the selected machine?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Delete machine" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Pick a host from the ARP cache" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "IP Address" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Host Name" #: ui/detail.ui:29 msgid "ERROR" msgstr "ERROR" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Insert the machine name and its MAC address" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_Machine name:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "MAC _Address:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_UDP port number:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Request type:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Local (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Destination host:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Keyboard shortcuts" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Turn on" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Detect from ARP cache" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Import from ethers file" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "Open the options menu" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Deselect all" #: ui/main.ui:172 msgid "Select machines" msgstr "Select machine" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Show the about dialog" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Machines" gwakeonlan-0.8.6/po/es.po000066400000000000000000000077561466365517000152740ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Spanish translation for gWakeOnLAN # # Translators: # Matias Bellone , 2010 # Luca Della Ghezza , 2010 # Adolfo Jayme-Barrientos , 2012-2015 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2015-07-20 00:57+0000\n" "Last-Translator: Adolfo Jayme-Barrientos\n" "Language-Team: Spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Versión {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Contribuidores:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Editar equipo" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Añadir equipo" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Falta el nombre de la máquina" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "La dirección MAC no es válida" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "El equipo de destino no es válido" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "¿Confirma que quiere eliminar el equipo seleccionado?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Eliminar equipo" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Elija un equipo de la caché ARP" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "Dirección IP" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Nombre del equipo" #: ui/detail.ui:29 msgid "ERROR" msgstr "ERROR" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Introduzca el nombre del equipo y su dirección MAC" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_Nombre del equipo:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "Dirección M_AC:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "Número de puerto _UDP:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Tipo de solicitud:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Local (transmisión)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "Equipo de _destino:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Atajos del teclado" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Encender" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Detectar a partir de caché ARP" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Importar de archivo ethers" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Mostrar el diálogo Acerca" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "" gwakeonlan-0.8.6/po/eu.po000066400000000000000000000071321466365517000152620ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Basque translation for gWakeOnLAN # # Translators: # Asier Iturralde Sarasola , 2011 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2015-07-18 16:35+0000\n" "Last-Translator: Asier Iturralde Sarasola \n" "Language-Team: Basque\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: eu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Editatu gailua" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Gehitu gailua" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Gailuaren izena falta da" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "MAC helbide baliogabea" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Helburuko ostalari baliogabea" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Ziur zaude hautatutako gailua ezabatu nahi duzula?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Ezabatu gailua" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "" #: ui/detail.ui:29 msgid "ERROR" msgstr "" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Idatzi gailuaren izena eta MAC helbidea" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_Gailuaren izena:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "M_AC Helbidea:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_UDP ataka zenbakia:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Eskaera mota:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Lokala (difusioa)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Helburuko ostalaria:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Laster-teklak" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "" gwakeonlan-0.8.6/po/fr.po000066400000000000000000000104711466365517000152600ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # French translation for gWakeOnLAN # # Translators: # Emmanuel , 2010 # Enguerran P. , 2020 # Paul Mairo , 2022 # Albano Battistella , 2022 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-03-11 00:44+0000\n" "Last-Translator: Albano Battistella \n" "Language-Team: French\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fr\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Version {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "Faites sortir vos machines de veille avec la fonctionnalité Wake on LAN" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Contributeurs:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "Page d'accueil du projet" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "Code source" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "Informations sur l'auteur" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "Suivi des problèmes et des bugs" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "Traductions" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Modifier l'appareil" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Ajouter un appareil" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Nom de l'appareil manquant" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Adresse MAC invalide" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Hôte de destination invalide" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Êtes-vous sûr de vouloir supprimer l'appareil sélectionné?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Supprimer l'appareil" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Choissisez un hôte depuis le cache ARP" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "Adresse IP" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Nom d'hôte" #: ui/detail.ui:29 msgid "ERROR" msgstr "ERREUR" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Insérer le nom de l'appareil et son adresse MAC" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_Nom de l'appareil :" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "_Adresse MAC :" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "Numéro de port _UDP :" #: ui/detail.ui:191 msgid "Request type:" msgstr "Type de requête:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Local (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Hôte de destination:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Raccourcis clavier" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Allumer" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Détecter depuis le cache ARP" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Importer depuis un fichier ethers" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "Ouvrir le menu options" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Tout désélectionner" #: ui/main.ui:172 msgid "Select machines" msgstr "Sélectionner des machines" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Afficher la boîte de dialogue à propos" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Machines" gwakeonlan-0.8.6/po/gwakeonlan.pot000066400000000000000000000061511466365517000171630ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # X translation for gWakeOnLAN msgid "" msgstr "" "Project-Id-Version: gWakeOnLAN\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "" #: ui/detail.ui:29 msgid "ERROR" msgstr "" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "" #: ui/detail.ui:191 msgid "Request type:" msgstr "" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "" #: ui/detail.ui:218 msgid "_Internet" msgstr "" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "" gwakeonlan-0.8.6/po/he.po000066400000000000000000000073741466365517000152550ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Hebrew translation for gWakeOnLAN # # Translators: # GenghisKhan , 2013 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-04-18 02:00+0200\n" "Last-Translator: GenghisKhan \n" "Language-Team: Hebrew\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: he\n" "Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "{VERSION} גרסת" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "ערוך מכונה" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "הוסף מכונה" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "שם מכונה חסר" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "כתובת MAC שגויה" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "מארח יעד שגוי" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "האם אתה בטוח שברצונך להסיר את המכונה הנבחרת?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "מחק מכונה" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "" #: ui/detail.ui:29 msgid "ERROR" msgstr "" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "שבץ את שם המכונה וגם כתובת MAC של אותה מכונה" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "שם _מכונה:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "כתובת M_AC:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "מספר פורט _UDP:" #: ui/detail.ui:191 msgid "Request type:" msgstr "טיפוס בקשה:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_מקומי (שידור)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_אינטרנט" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_מארח יעד:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "צירופי מקשים" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "הדלק" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "אפס בחירות" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "" gwakeonlan-0.8.6/po/it.po000066400000000000000000000101601466365517000152600ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Italian translation for gWakeOnLAN # # Translators: # Fabio Castelli (Muflone) , 2009-2022 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-04-18 02:06+0200\n" "Last-Translator: Fabio Castelli (Muflone) \n" "Language-Team: Italian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: it\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Versione {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "Risveglia le tue macchine utilizzando Wake on LAN" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Contributori:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "Home page del progetto" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "Codice sorgente" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "Informazioni sull'autore" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "Tracciamento di problemi e bug" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "Traduzioni" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Modifica macchina" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Aggiungi macchina" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Nome della macchina mancante" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Indirizzo MAC non valido" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Sistema di destinazione non valido" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Sicuro di voler eliminare la macchina selezionata?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Elimina macchina" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Scegli un sistema dalla cache ARP" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "Indirizzo IP" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Nome del sistema" #: ui/detail.ui:29 msgid "ERROR" msgstr "ERRORE" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Inserisci il nome della macchina e il suo indirizzo MAC" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "Nome della _macchina:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "Indirizzo M_AC:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "Numero di porta _UDP:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Tipo di richiesta:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Locale (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "Sistema di _destinazione:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Scorciatoie da tastiera" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Accendi" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Rileva dalla cache ARP" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Importa da file ethers" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "Apri il menu opzioni" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Deseleziona tutto" #: ui/main.ui:172 msgid "Select machines" msgstr "Seleziona macchine" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Mostra la finestra delle informazioni" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Macchine" gwakeonlan-0.8.6/po/ko_KR.po000066400000000000000000000073621466365517000156630ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Korean translation for gWakeOnLAN # # Translators: # Ian Snyder , 2017 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-04-18 02:09+0200\n" "Last-Translator: Ian Snyder \n" "Language-Team: Korean (Korea)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ko_KR\n" "Plural-Forms: nplurals=1; plural=0;\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "버전 {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "기여자:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "장치 수정" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "장치 추가" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "실종된 장치 이름" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "올바르지 않은 MAC 주소" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "올바르지 않은 도착지 호스트" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "정말로 선택된 이 장치를 제거하시겠습니까?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "장치 제거" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "IP 주소" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "호스트네임" #: ui/detail.ui:29 msgid "ERROR" msgstr "오류" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "장치 이름과 장치의 MAC 주소를 입력하세요" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_장치 이름:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "M_AC 주소:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_UDP 포트 번호:" #: ui/detail.ui:191 msgid "Request type:" msgstr "요청 타입:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_로컬 (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_인터넷" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_도착지 호스트:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "키보드 바로 가기" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "켜기" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "ethers 파일에서 불러오기" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "" gwakeonlan-0.8.6/po/lt.po000066400000000000000000000103051466365517000152640ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Lithuanian translation for gWakeOnLAN # # Translators: # Moo, 2016-2022 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-04-18 02:14+0200\n" "Last-Translator: Moo\n" "Language-Team: Lithuanian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: lt\n" "Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Versija {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "Pažadinkite kompiuterius naudodami žadinimą vietiniame tinkle" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Talkininkai:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "Projekto internetinė svetainė" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "Pirminis kodas" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "Informacija apie autorių" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "Klaidos ir klaidų sekiklis" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "Vertimai" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Taisyti kompiuterį" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Pridėti kompiuterį" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Trūksta kompiuterio pavadinimo" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Neteisingas MAC adresas" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Neteisingas paskirties serveris" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Ar tikrai norite pašalinti pasirinktą kompiuterį?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Ištrinti kompiuterį" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Parinkti serverį iš ARP podėlio" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "IP adresas" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Serverio pavadinimas" #: ui/detail.ui:29 msgid "ERROR" msgstr "KLAIDA" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Įterpkite kompiuterio pavadinimą ir jo MAC adresą" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_Kompiuterio pavadinimas:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "M_AC adresas:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_UDP prievado numeris:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Užklausos tipas:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Vietinė (transliavimas)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internetas" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Paskirties serveris:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Klaviatūros trumpiniai" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Įjungti" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Aptikti iš ARP podėlio" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Importuoti iš „ethers“ failo" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "Atverti parinkčių meniu" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Nuimti žymėjimą nuo visų" #: ui/main.ui:172 msgid "Select machines" msgstr "Žymėti kompiuterius" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Rodyti dialogą su informacija apie programą" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Kompiuteriai" gwakeonlan-0.8.6/po/nl.po000066400000000000000000000077121466365517000152660ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Dutch translation for gWakeOnLAN # # Translators: # Heimen Stoffels , 2022 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-03-11 10:42+0000\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Versie {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "Ontwaak uw computers met Wake-on-LAN" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Bijdragers:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "Website" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "Broncode" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "Informatie over de maker" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "Problemen en bugs" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "Vertalingen" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Computer bewerken" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Computer toevoegen" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Voer een computernaam in" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Ongeldig MAC-adres" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Ongeldige bestemming" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Weet u zeker dat u de gekozen computer wilt verwijderen?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Computer verwijderen" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Kies een host uit de ARP-cache" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "IP-adres" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Hostnaam" #: ui/detail.ui:29 msgid "ERROR" msgstr "FOUTMELDING" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Voer de computernaam en het bijbehorende MAC-adres in" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "Computernaa_m:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "M_AC-adres:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_UDP-poortnummer:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Soort aanvraag:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Lokaal (uitzenden)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Bestemming:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Sneltoetsen" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Inschakelen" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Detecteren op basis van ARP-cache" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Importeren uit ethers-bestand" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "Open het optiesmenu" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Niets selecteren" #: ui/main.ui:172 msgid "Select machines" msgstr "Computers selecteren" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Toon het venster ‘Over’" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Computers" gwakeonlan-0.8.6/po/pl.po000066400000000000000000000073411466365517000152660ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Polish translation for gWakeOnLAN # # Translators: # bjfs , 2011 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-04-18 02:26+0200\n" "Last-Translator: bjfs \n" "Language-Team: Polish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Wersja {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Autorzy:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Edytuj komputer" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Dodaj komputer" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Brak nazwy komputera" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Nieprawidłowy adres MAC" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Nieprawidłowy host docelowy" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Czy na pewno usunąć zaznaczony komputer?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Usuń komputer" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "" #: ui/detail.ui:29 msgid "ERROR" msgstr "" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Wpisz nazwę komputera i jego adres MAC" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "Nazwa _komputera:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "_Adres MAC:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "Numer portu _UDP:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Typ żądania:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Lokalny (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Docelowy host:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Skróty klawiszowe" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Wyświetlenie informacji o programie" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "" gwakeonlan-0.8.6/po/pt.po000066400000000000000000000076541466365517000153050ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Portuguese translation for gWakeOnLAN # # Translators: # Amilton Pereira cavalcante , 2022 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-04-18 02:36+0200\n" "Last-Translator: Amilton Pereira cavalcante \n" "Language-Team: Portuguese\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Versão {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "Ligar máquina com o Wake On LAN" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Contribuidores:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Edita PC" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Adicionar PC" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "PC sem nome" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Endereço MAC Inválido" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "PC de destino inválido " #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Tem certeza que deseja remover o PC selecionado?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Deleta PC" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Escolher um PC a pratir do cache ARP" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "Endereço IP" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Nome do host" #: ui/detail.ui:29 msgid "ERROR" msgstr "ERRO" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Insira o nome do PC e seu endereço MAC" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_PC nome:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "Endereço M_AC:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_Número Porta UDP:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Tipo de requisição:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Local (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_PC Destino:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Atalhos de teclado" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Ligar" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Detectar a partir do chache ARP" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Importar do arquivo ethers" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "Abrir o menu de opções" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Deselecionar todos" #: ui/main.ui:172 msgid "Select machines" msgstr "Selecionar máquinas" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Mostrar diálogo sobre" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Máquinas" gwakeonlan-0.8.6/po/pt_BR.po000066400000000000000000000100661466365517000156570ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Portuguese Brazilian translation for gWakeOnLAN # # Translators: # Amilton Pereira Cavalcante , 2016 # Paguiar735 , 2022 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-04-18 02:36+0200\n" "Last-Translator: Paguiar735 \n" "Language-Team: Portuguese (Brazil)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: pt_BR\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Versão {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "Ligar máquina com o Wake On LAN" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Contribuidores:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Editar máquina" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Adicionar máquina" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Máquina sem nome" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Endereço MAC Inválido" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Servidor de destino inválido" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Tem certeza que deseja remover a máquina selecionada?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Deletar máquina" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Selecionar servidor a partir do cache ARP" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "Endereço IP" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Nome do servidor" #: ui/detail.ui:29 msgid "ERROR" msgstr "ERRO" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Insira o nome da máquina e seu endereço MAC" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_Máquina nome:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "Endereço M_AC:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_Número Porta UDP:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Tipo de requisição:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Local (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_PC Destino:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Atalhos de teclado" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Ligar" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Detectar a partir do chache ARP" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Importar do arquivo ethers" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "Abrir o menu de opções" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Deselecionar todos" #: ui/main.ui:172 msgid "Select machines" msgstr "Selecionar máquinas" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Exibir caixa de diálogo sobre" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Máquinas" gwakeonlan-0.8.6/po/ru.po000066400000000000000000000105341466365517000152770ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Russian translation for gWakeOnLAN # # Translators: # Сергей Богатов , 2010,2015,2020,2022 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2023-08-28 16:36+0200\n" "Last-Translator: Сергей Богатов \n" "Language-Team: Russian\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Версия {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Контрибьюторы:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "Домашняя страница проекта" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "Исходный код" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Редактировать" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Добавить" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Не задано имя компьютера" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Неверный MAC адрес" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Неверное расположение" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Удалить выбранный компьютер из списка?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Удалить" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Выбор хоста из кэша ARP" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "IP Адрес" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Имя компьютера" #: ui/detail.ui:29 msgid "ERROR" msgstr "ОШИБКА" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Введите имя и MAC адрес компьютера" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_Имя компьютера:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "M_AC адрес:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_Номер порта UDP:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Тип запроса:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Локальная сеть" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Интернет" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Расположение компьютера:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Комбинации клавиш" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Включить" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Найти в ARP кэше" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Импорт из файла /etc/ethers" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "Открыть настройки" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Показать диалог \"О программе\"" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Компьютеры" gwakeonlan-0.8.6/po/sk.po000066400000000000000000000101741466365517000152660ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Slovak translation for gWakeOnLAN # # Translators: # Jozef Riha , 2010 # Jozef Gaal , 2024 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2023-08-28 16:38+0200\n" "Last-Translator: Jozef Gaal \n" "Language-Team: Slovak\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Verzia {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "Prebuďte svoje počítače pomocou funkcie Wake on LAN" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Prispievatelia:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "Domovská stránka projektu" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "Zdrojový kód" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "Informácie o autorovi" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "Sledovanie problémov a chýb" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "Preklady" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Upraviť stroj" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Pridať stroj" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Chýba názov stroja" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Neplatná MAC adresa" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Neplatný cieľový hostiteľ" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Naozaj chcete odstrániť vybraný stroj?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Vymazať stroj" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Vybrať hostiteľa z vyrovnávacej pamäte ARP" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "IP adresa" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Názov hostiteľa" #: ui/detail.ui:29 msgid "ERROR" msgstr "CHYBA" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Zadajte názov stroja a jeho MAC adresu" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_Názov stroja:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "M_AC adresa:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "Číslo _UDP portu:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Typ požiadavky:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Miestna (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Cieľový hostiteľ:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Klávesové skratky" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Zapnúť" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Zistiť z vyrovnávacej pamäte ARP" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Import zo súboru ether" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "Otvoriť ponuku možností" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Zrušiť výber všetkých" #: ui/main.ui:172 msgid "Select machines" msgstr "Vybrať stroje" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Zobraziť dialógové okno o aplikácii" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Stroje" gwakeonlan-0.8.6/po/sl_SI.po000066400000000000000000000076001466365517000156620ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Slovenian translation for gWakeOnLAN # # Translators: # Andrej Mernik , 2012-2015 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-04-18 02:47+0200\n" "Last-Translator: Andrej Mernik \n" "Language-Team: Slovenian (Slovenia)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sl_SI\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Različica {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Prispevkarji:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Uredi računalnik" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Dodaj računalnik" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Manjka ime računalnika" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Neveljaven strojni naslov" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Neveljaven ciljni gostitelj" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Ali ste prepričani, da želite odstraniti izbran računalnik?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Izbriši računalnik" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "Izberi gostitelja iz predpomnilnika ARP" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "Naslov IP" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Ime gostitelja" #: ui/detail.ui:29 msgid "ERROR" msgstr "NAPAKA" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Vnesite naslov računalnika in njegov strojni naslov" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "I_me računalnika:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "Strojni n_aslov:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "Številka vrat _UDP:" #: ui/detail.ui:191 msgid "Request type:" msgstr "Vrsta zahteve:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Krajevno (vsesmerno oddajanje)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Ciljni gostitelj:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Tipkovne bližnjice" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Vklopi" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "Zaznaj v predpomnilniku ARP" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "Uvozi iz datoteke ethers" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "" gwakeonlan-0.8.6/po/tr.po000066400000000000000000000100501466365517000152670ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Turkish translation for gWakeOnLAN # # Translators: # Necdet Yücel , 2012 # Fatih Altun , 2022-2024 # msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2023-05-23 12:09+0300\n" "Last-Translator: Fatih Altun \n" "Language-Team: Turkish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "Versiyon {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "Wake on LAN kullanarak makinelerinizi uyandırın" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "Katkıda Bulunanlar:" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "Proje ana sayfası" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "Kaynak kodu" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "Yazar bilgileri" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "Sorun ve hataların takibi" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "Çeviriler" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "Makine düzenle" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "Makine ekle" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "Eksik makine adı" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "Geçersiz MAC adresi" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "Geçersiz hedef istemci" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "Seçtiğiniz makineyi silmek istediğinizden emin misiniz?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "Makine sil" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "ARP önbelleğinden bir ana bilgisayar seçin" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "IP adresi" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "Ana Bilgisayar Adı" #: ui/detail.ui:29 msgid "ERROR" msgstr "HATA" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "Makine adını ve MAC adresini girin" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "_Makine adı:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "MAC _Adresi" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_UDP port numarası:" #: ui/detail.ui:191 msgid "Request type:" msgstr "İstek tipi:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "_Yerel (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "_Internet" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "_Hedef istemci:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "Klavye Kısayolları" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "Aç" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "ARP önbelleğinden algıla" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "ethers dosyasından içe aktar" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "Seçenekler menüsünü aç" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "Tüm seçimleri kaldır" #: ui/main.ui:172 msgid "Select machines" msgstr "Makineleri seç" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "Hakkında iletişim kutusunu göster" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "Makineler" gwakeonlan-0.8.6/po/zh_TW.po000066400000000000000000000070541466365517000157070ustar00rootroot00000000000000# gWakeOnLAN # Wake up your machines using Wake on LAN # Copyright (C) 2009-2024 Fabio Castelli (Muflone) # Website: http://www.muflone.com/gwakeonlan/ # This file is distributed under the same license of gWakeOnLAN. # Chinese-Taiwan translation for gWakeOnLAN # # Translators: # Cosmo Chene , 2015 msgid "" msgstr "" "Project-Id-Version: gWakeOnLan\n" "Report-Msgid-Bugs-To: https://github.com/muflone/gwakeonlan/issues/\n" "POT-Creation-Date: 2022-08-21 02:37+0200\n" "PO-Revision-Date: 2022-04-18 02:53+0200\n" "Last-Translator: Cosmo Chene \n" "Language-Team: Chinese (Taiwan)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: zh_TW\n" "Plural-Forms: nplurals=1; plural=0;\n" #: gwakeonlan/ui/about.py:66 #, python-brace-format msgid "Version {VERSION}" msgstr "版本 {VERSION}" #: gwakeonlan/ui/about.py:69 msgid "Wake up your machines using Wake on LAN" msgstr "" #: gwakeonlan/ui/about.py:78 msgid "Contributors:" msgstr "贡献者" #: gwakeonlan/ui/about.py:85 msgid "Project home page" msgstr "" #: gwakeonlan/ui/about.py:86 msgid "Source code" msgstr "" #: gwakeonlan/ui/about.py:87 msgid "Author information" msgstr "" #: gwakeonlan/ui/about.py:88 msgid "Issues and bugs tracking" msgstr "" #: gwakeonlan/ui/about.py:89 msgid "Translations" msgstr "" #: gwakeonlan/ui/detail.py:73 ui/main.ui:53 ui/shortcuts.ui:64 msgid "Edit machine" msgstr "編輯主機" #: gwakeonlan/ui/detail.py:75 ui/main.ui:45 ui/shortcuts.ui:57 msgid "Add machine" msgstr "加入主機" #: gwakeonlan/ui/detail.py:86 msgid "Missing machine name" msgstr "失聯主機名稱" #: gwakeonlan/ui/detail.py:90 msgid "Invalid MAC address" msgstr "無效的 MAC 位址" #: gwakeonlan/ui/detail.py:94 msgid "Invalid destination host" msgstr "無效的目標主機" #: gwakeonlan/ui/main.py:255 msgid "Are you sure you want to remove the selected machine?" msgstr "您確定要移除選取的主機嗎?" #: gwakeonlan/ui/main.py:256 ui/main.ui:61 ui/shortcuts.ui:71 msgid "Delete machine" msgstr "刪除主機" #: ui/arpcache.ui:27 msgid "Pick a host from the ARP cache" msgstr "" #: ui/arpcache.ui:113 msgid "IP Address" msgstr "" #: ui/arpcache.ui:125 msgid "Host Name" msgstr "" #: ui/detail.ui:29 msgid "ERROR" msgstr "" #: ui/detail.ui:91 msgid "Insert the machine name and its MAC address" msgstr "輸入主機名稱及 MAC 位址" #: ui/detail.ui:120 msgid "_Machine name:" msgstr "主機名稱:" #: ui/detail.ui:148 msgid "MAC _Address:" msgstr "M_AC 位址:" #: ui/detail.ui:162 msgid "_UDP port number:" msgstr "_UDP 埠號:" #: ui/detail.ui:191 msgid "Request type:" msgstr "請求類型:" #: ui/detail.ui:201 msgid "_Local (broadcast)" msgstr "本地端_L (broadcast)" #: ui/detail.ui:218 msgid "_Internet" msgstr "網際網路_I" #: ui/detail.ui:240 msgid "_Destination host:" msgstr "目標主機:" #: ui/main.ui:25 ui/shortcuts.ui:35 msgid "Keyboard shortcuts" msgstr "鍵盤捷徑鍵" #: ui/main.ui:36 ui/shortcuts.ui:78 msgid "Turn on" msgstr "開機" #: ui/main.ui:69 msgid "Detect from ARP cache" msgstr "" #: ui/main.ui:75 msgid "Import from ethers file" msgstr "" #: ui/main.ui:84 ui/main.ui:90 ui/shortcuts.ui:28 msgid "Open the options menu" msgstr "" #: ui/main.ui:107 ui/shortcuts.ui:92 msgid "Deselect all" msgstr "" #: ui/main.ui:172 msgid "Select machines" msgstr "" #: ui/shortcuts.ui:21 msgid "Show the about dialog" msgstr "" #: ui/shortcuts.ui:52 msgid "Machines" msgstr "" gwakeonlan-0.8.6/requirements.txt000066400000000000000000000000361466365517000171530ustar00rootroot00000000000000pyxdg==0.28 PyGObject==3.48.2 gwakeonlan-0.8.6/requirements_ci.txt000066400000000000000000000000661466365517000176310ustar00rootroot00000000000000-r requirements.txt flake8==7.1.1 setuptools==74.0.0 gwakeonlan-0.8.6/requirements_development.txt000066400000000000000000000000721466365517000215550ustar00rootroot00000000000000-r requirements.txt PyGObject-stubs==1.0.0 flake8==7.1.1 gwakeonlan-0.8.6/setup.cfg000066400000000000000000000002131466365517000155050ustar00rootroot00000000000000[easy_install] zip_ok = False [build] build_base = build [bdist] dist_dir = dist [bdist_wheel] dist_dir = dist [sdist] dist_dir = dist gwakeonlan-0.8.6/setup.py000077500000000000000000000221001466365517000154000ustar00rootroot00000000000000#!/usr/bin/env python3 ## # Project: gWakeOnLAN # Description: Wake up your machines using Wake on LAN # Author: Fabio Castelli (Muflone) # Copyright: 2009-2024 Fabio Castelli # License: GPL-3+ # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ## import itertools import pathlib import setuptools import setuptools.command.install_scripts import subprocess # Importing distutils after setuptools uses the setuptools distutils from distutils.command.install_data import install_data from gwakeonlan.constants import (APP_AUTHOR, APP_AUTHOR_EMAIL, APP_DESCRIPTION, APP_DOMAIN, APP_NAME, APP_VERSION, URL_APPLICATION, URL_SOURCES) class InstallScripts(setuptools.command.install_scripts.install_scripts): def run(self): setuptools.command.install_scripts.install_scripts.run(self) self.rename_python_scripts() def rename_python_scripts(self): """Rename main executable python script without .py extension""" for script in self.get_outputs(): path_file_script = pathlib.Path(script) path_destination = path_file_script.with_suffix(suffix='') if path_file_script.suffix == '.py': # noinspection PyUnresolvedReferences setuptools.distutils.log.info( 'renaming the python script ' f'{path_file_script.name} -> ' f'{path_destination.stem}') path_file_script.rename(path_destination) class InstallData(install_data): def run(self): self.install_icons() self.install_translations() install_data.run(self) def install_icons(self): # noinspection PyUnresolvedReferences setuptools.distutils.log.info('Installing icons...') path_icons = pathlib.Path('share') / 'icons' / 'hicolor' for path_format in pathlib.Path('icons').iterdir(): self.data_files.append((path_icons / path_format.name / 'apps', list(map(str, path_format.glob('*'))))) def install_translations(self): # noinspection PyUnresolvedReferences setuptools.distutils.log.info('Installing translations...') path_base = pathlib.Path(__file__).parent.absolute() # Find where to save the compiled translations try: # Use the install_data (when using "setup.py install --user") # noinspection PyUnresolvedReferences path_install = pathlib.Path(self.install_data) except AttributeError: # Use the install_dir (when using "setup.py install") path_install = pathlib.Path(self.install_dir) path_locale = path_install / 'share' / 'locale' for path_file_po in pathlib.Path('po').glob('*.po'): path_destination = path_locale / path_file_po.stem / 'LC_MESSAGES' path_file_mo = path_destination / f'{APP_DOMAIN}.mo' if not path_destination.exists(): # noinspection PyUnresolvedReferences setuptools.distutils.log.info(f'creating {path_destination}') path_destination.mkdir(parents=True) # noinspection PyUnresolvedReferences setuptools.distutils.log.info(f'compiling {path_file_po} -> ' f'{path_file_mo}') subprocess.call( args=('msgfmt', f'--output-file={path_file_mo}', path_file_po), cwd=path_base) class CommandCreatePOT(setuptools.Command): description = "create base POT file" user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): path_base = pathlib.Path(__file__).parent.absolute() path_po = path_base / 'po' path_ui = path_base / 'ui' path_pot = path_po / f'{APP_DOMAIN}.pot' list_files_process = [] # Add *.ui files to list of files to process for filename in path_ui.glob('*.ui'): list_files_process.append(filename.relative_to(path_base)) # Add *.py files to list of files to process for filename in path_base.rglob('*.py'): list_files_process.append(filename.relative_to(path_base)) # Sort the files to process them always in the same order (hopefully) list_files_process.sort() # Extract messages from the files to process # noinspection PyTypeChecker subprocess.call( args=itertools.chain(( 'xgettext', '--keyword=_', '--keyword=N_', f'--output={path_pot}', '--add-location', f'--package-name={APP_NAME}', f'--copyright-holder={APP_AUTHOR}', f'--msgid-bugs-address={URL_SOURCES}issues/'), list_files_process), cwd=path_base) class CommandCreatePO(setuptools.Command): description = "create translation PO file" user_options = [ ('locale=', None, 'Define locale'), ('output=', None, 'Define output file'), ] # noinspection PyUnusedLocal def __init__(self, dist, **kw): super().__init__(dist) self.locale = None self.output = None def initialize_options(self): pass def finalize_options(self): assert self.locale, 'Missing locale' assert self.output, 'Missing output file' def run(self): path_base = pathlib.Path(__file__).parent.absolute() path_file_pot = path_base / 'po' / f'{APP_DOMAIN}.pot' path_file_po = path_base / 'po' / f'{self.output}.po' # Create PO file subprocess.call( args=('msginit', f'--input={path_file_pot}', '--no-translator', f'--output-file={path_file_po}', f'--locale={self.locale}'), cwd=path_base) class CommandTranslations(setuptools.Command): description = "build translations" user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): path_base = pathlib.Path(__file__).parent.absolute() path_po = path_base / 'po' for file_po in path_po.glob('*.po'): subprocess.call(('msgmerge', '--update', '--backup=off', file_po, path_po / f'{APP_DOMAIN}.pot')) path_mo = path_base / 'locale' / file_po.stem / 'LC_MESSAGES' if not path_mo.exists(): path_mo.mkdir(parents=True) file_mo = path_mo / f'{APP_DOMAIN}.mo' subprocess.call(('msgfmt', '--output-file', file_mo, file_po)) setuptools.setup( name=APP_NAME, version=APP_VERSION, author=APP_AUTHOR, author_email=APP_AUTHOR_EMAIL, maintainer=APP_AUTHOR, maintainer_email=APP_AUTHOR_EMAIL, url=URL_APPLICATION, description=APP_DESCRIPTION, license='GPL v3', scripts=['gwakeonlan.py'], packages=['gwakeonlan', 'gwakeonlan.models', 'gwakeonlan.ui'], data_files=[ (f'share/{APP_DOMAIN}/data', ['data/gwakeonlan.png']), (f'share/{APP_DOMAIN}/data/icons', list(map(str, (pathlib.Path('data') / 'icons').glob('*')))), ('share/applications', ['data/gwakeonlan.desktop']), (f'share/doc/{APP_DOMAIN}', list(itertools.chain( list(map(str, pathlib.Path('doc').glob('*'))), list(map(str, pathlib.Path('.').glob('*.md')))))), ('share/man/man1', ['man/gwakeonlan.1']), (f'share/{APP_DOMAIN}/ui', [str(file) for file in pathlib.Path('ui').glob('*') if not file.name.endswith('~')]), ('share/metainfo', ['data/com.muflone.gwakeonlan.metainfo.xml']), ], cmdclass={ 'install_scripts': InstallScripts, 'install_data': InstallData, 'create_pot': CommandCreatePOT, 'create_po': CommandCreatePO, 'translations': CommandTranslations } ) gwakeonlan-0.8.6/ui/000077500000000000000000000000001466365517000143055ustar00rootroot00000000000000gwakeonlan-0.8.6/ui/about.ui000066400000000000000000000025551466365517000157650ustar00rootroot00000000000000 False 5 True center-on-parent True dialog False vertical 2 False end False True end 0 gwakeonlan-0.8.6/ui/arpcache.ui000066400000000000000000000160271466365517000164200ustar00rootroot00000000000000 _Refresh _Refresh False Pick a host from the ARP cache 450 260 dialog False vertical 2 False False end Refresh True action_refresh True True True True False True 0 True Cancel True True True True True True 1 OK True True True True True True True True 2 False True end 0 True True in True True model True IP Address 0 True Host Name 2 True MAC Address 1 True True 1 button_cancel button_ok gwakeonlan-0.8.6/ui/detail.ui000066400000000000000000000321521466365517000161110ustar00rootroot00000000000000 1 65535 9 1 10 False 9 True dialog False vertical 7 False end False <b><span foreground="red">ERROR</span></b> True center False True 0 True Cancel True True True True True True 1 OK True True True True True True True True 2 False True end 0 True False True True 7 7 True False <big><b>Insert the machine name and its MAC address</b></big> True 0 0 4 True False start 72 computer 0 1 5 True False start False _Machine name: True 1 1 True True True True 17 2 2 2 True False start False MAC _Address: True 1 2 True False start False _UDP port number: True 1 3 True True True 90 adjustment_port_number 9 2 3 2 True False start False Request type: True 1 4 _Local (broadcast) True True False start True True True 2 4 _Internet True True False start True True True radio_request_local 3 4 True False start False _Destination host: True 1 5 True True True 2 5 2 True True True True 2 1 2 True True 1 button_cancel button_ok gwakeonlan-0.8.6/ui/main.ui000066400000000000000000000444511466365517000156000ustar00rootroot00000000000000 accelerators Quit About help-about Keyboard shortcuts help-browser accelerators Turn on system-run True Add machine list-add Edit machine document-properties Delete machine list-remove Detect from ARP cache Import from ethers file accelerators Open the options menu open-menu-symbolic Open the options menu accelerators Select all Deselect all True False action_turnon True False Turn on True action_add True False Add machine True action_edit True False Edit machine True action_delete True False Delete machine True action_import_arp_cache True False Detect from ARP cache action_import_ethers True False Import from ethers file True False Select machines True True False action_select_all True False Select all True action_deselect_all True False Deselect all True True False action_shortcuts True False Keyboard shortcuts True action_about True False About True True False gWakeOnLAN False True action_options True True False True none menu_options end About action_about True True True none end 1 Turn on action_turnon True True True 3 True False 4 Add action_add True True True none 5 Edit action_edit True True True none 6 Delete action_delete True True True none 7 False 620 240 True True in True True model 0 1 6 True Machine name 1 0 True MAC Address 2 2 True Request type 3 3 True Destination host 4 4 True UDP port number 5 5 gwakeonlan-0.8.6/ui/shortcuts.ui000066400000000000000000000103241466365517000167020ustar00rootroot00000000000000 1 1 shortcuts 15 1 General 1 F1 Show the about dialog 1 F10 Open the options menu 1 <ctrl>question Keyboard shortcuts 1 <ctrl>Q Quit 1 machines Machines 1 Insert Add machine 1 Return Edit machine 1 Delete Delete machine 1 <ctrl>Return Turn on 1 <ctrl>A Select all 1 <ctrl><shift>A Deselect all