Codebase list kodi-pvr-wmc / c10c68f
New upstream version 2.4.5 Balint Reczey 4 years ago
92 changed file(s) with 2133 addition(s) and 830 deletion(s). Raw diff Collapse all Expand all
22 #
33 # Define the build matrix
44 #
5 # Travis defaults to building on Ubuntu Precise when building on
6 # Linux. We need Trusty in order to get up to date versions of
5 # Travis defaults to building on Ubuntu Trusty when building on
6 # Linux. We need Xenial in order to get up to date versions of
77 # cmake and g++.
88 #
9 env:
10 global:
11 - app_id=pvr.wmc
12
913 matrix:
1014 include:
1115 - os: linux
12 dist: trusty
16 dist: xenial
1317 sudo: required
1418 compiler: gcc
1519 - os: linux
16 dist: trusty
20 dist: xenial
1721 sudo: required
1822 compiler: clang
1923 - os: osx
20 osx_image: xcode7.3
24 osx_image: xcode9
2125 - os: osx
22 osx_image: xcode6.1
23
24 #
25 # Some of the OS X images don't have cmake, contrary to what people
26 # on the Internet say
27 #
28 before_install:
29 - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then which cmake || brew update ; fi
30 - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then which cmake || brew install cmake ; fi
26 osx_image: xcode9.4
3127
3228 #
3329 # The addon source is automatically checked out in $TRAVIS_BUILD_DIR,
3531 #
3632 before_script:
3733 - cd $TRAVIS_BUILD_DIR/..
38 - git clone --depth=1 https://github.com/xbmc/xbmc.git
39 - cd pvr.wmc && mkdir build && cd build
40 - cmake -DADDONS_TO_BUILD=pvr.wmc -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/project/cmake/addons
34 - git clone --branch Leia --depth=1 https://github.com/xbmc/xbmc.git
35 - cd ${app_id} && mkdir build && cd build
36 - mkdir -p definition/${app_id}
37 - echo ${app_id} $TRAVIS_BUILD_DIR $TRAVIS_COMMIT > definition/${app_id}/${app_id}.txt
38 - cmake -DADDONS_TO_BUILD=${app_id} -DADDON_SRC_PREFIX=$TRAVIS_BUILD_DIR/.. -DADDONS_DEFINITION_DIR=$TRAVIS_BUILD_DIR/build/definition -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/../xbmc/addons -DPACKAGE_ZIP=1 $TRAVIS_BUILD_DIR/../xbmc/cmake/addons
4139
4240 script: make
0 cmake_minimum_required(VERSION 3.5)
01 project(pvr.wmc)
1
2 cmake_minimum_required(VERSION 2.6)
3
4 enable_language(CXX)
52
63 find_package(Kodi REQUIRED)
74 find_package(kodiplatform REQUIRED)
96
107 include_directories(${kodiplatform_INCLUDE_DIRS}
118 ${p8-platform_INCLUDE_DIRS}
12 ${KODI_INCLUDE_DIR})
9 ${KODI_INCLUDE_DIR}/..) # Hack way with "/..", need bigger Kodi cmake rework to match right include ways
1310
1411 add_definitions(-DUSE_DEMUX)
1512
1815 src/Socket.cpp
1916 src/utilities.cpp)
2017
18 set(WMC_HEADERS src/client.h
19 src/clientversion.h
20 src/pvr2wmc.h
21 src/Socket.h
22 src/utilities.h)
23
2124 set(DEPLIBS ${kodiplatform_LIBRARIES}
2225 ${p8-platform_LIBRARIES})
2326
2427 if (WIN32)
2528 list(APPEND DEPLIBS ws2_32)
29 add_compile_options(/wd4996) # Need gethostbyname and inet_addr change to prevent
2630 endif()
2731
2832 build_addon(pvr.wmc WMC DEPLIBS)
0 buildPlugin(version: "Leia")
0 [![Build Status](https://travis-ci.org/kodi-pvr/pvr.wmc.svg?branch=master)](https://travis-ci.org/kodi-pvr/pvr.wmc)
0 [![Build Status](https://travis-ci.org/kodi-pvr/pvr.wmc.svg?branch=Leia)](https://travis-ci.org/kodi-pvr/pvr.wmc/branches)
1 [![Build Status](https://ci.appveyor.com/api/projects/status/github/kodi-pvr/pvr.wmc?branch=Leia&svg=true)](https://ci.appveyor.com/project/kodi-pvr/pvr-wmc?branch=Leia)
12 [![Coverity Scan Build Status](https://scan.coverity.com/projects/5120/badge.svg)](https://scan.coverity.com/projects/5120)
23
34 # Windows Media Center PVR
4 Windows Media Center PVR client addon for [Kodi] (http://kodi.tv)
5 Windows Media Center PVR client addon for [Kodi] (https://kodi.tv)
56
67 ## Build instructions
78
89 ### Linux
910
10 1. `git clone https://github.com/xbmc/xbmc.git`
11 1. `git clone --branch Leia https://github.com/xbmc/xbmc.git`
1112 2. `git clone https://github.com/kodi-pvr/pvr.wmc.git`
1213 3. `cd pvr.wmc && mkdir build && cd build`
13 4. `cmake -DADDONS_TO_BUILD=pvr.wmc -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/project/cmake/addons`
14 4. `cmake -DADDONS_TO_BUILD=pvr.wmc -DADDON_SRC_PREFIX=../.. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/cmake/addons`
1415 5. `make`
1516
1617 ##### Useful links
1718
18 * [Kodi's PVR user support] (http://forum.kodi.tv/forumdisplay.php?fid=167)
19 * [Kodi's PVR development support] (http://forum.kodi.tv/forumdisplay.php?fid=136)
19 * [Kodi's PVR user support] (https://forum.kodi.tv/forumdisplay.php?fid=167)
20 * [Kodi's PVR development support] (https://forum.kodi.tv/forumdisplay.php?fid=136)
0 version: BuildNr.{build}
1
2 image: Visual Studio 2017
3
4 shallow_clone: true
5
6 clone_folder: c:\projects\pvr.wmc
7
8 environment:
9 app_id: pvr.wmc
10
11 matrix:
12 - GENERATOR: "Visual Studio 15"
13 CONFIG: Release
14 - GENERATOR: "Visual Studio 15 Win64"
15 CONFIG: Release
16 - GENERATOR: "Visual Studio 15 Win64"
17 CONFIG: Release
18 WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.16299.0"
19 - GENERATOR: "Visual Studio 15 ARM"
20 CONFIG: Release
21 WINSTORE: -DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION="10.0.16299.0"
22
23 build_script:
24 - cd ..
25 - git clone --branch Leia --depth=1 https://github.com/xbmc/xbmc.git
26 - cd %app_id%
27 - mkdir build
28 - cd build
29 - mkdir -p definition\%app_id%
30 - echo %app_id% %APPVEYOR_BUILD_FOLDER% %APPVEYOR_REPO_COMMIT% > definition\%app_id%\%app_id%.txt
31 - cmake -T host=x64 -G "%GENERATOR%" %WINSTORE% -DADDONS_TO_BUILD=%app_id% -DCMAKE_BUILD_TYPE=%CONFIG% -DADDONS_DEFINITION_DIR=%APPVEYOR_BUILD_FOLDER%/build/definition -DADDON_SRC_PREFIX=../.. -DCMAKE_INSTALL_PREFIX=../../xbmc/addons -DPACKAGE_ZIP=1 ../../xbmc/cmake/addons
32 - cmake --build . --config %CONFIG% --target %app_id%
00 Source: kodi-pvr-wmc
11 Priority: extra
22 Maintainer: Nobody <nobody@kodi.tv>
3 Build-Depends: debhelper (>= 9.0.0), cmake, kodi-pvr-dev,
4 libkodiplatform-dev (>= 16.0.0), kodi-addon-dev
3 Build-Depends: debhelper (>= 9.0.0), cmake, libkodiplatform-dev (>= 17.1.0),
4 kodi-addon-dev
55 Standards-Version: 3.9.4
66 Section: libs
77
99 Section: libs
1010 Architecture: any
1111 Depends: ${shlibs:Depends}, ${misc:Depends}
12 Conflicts: kodi-pvr-tvheadend-hts
13 Replaces: kodi-pvr-tvheadend-hts
1412 Description: WMC PVR for Kodi
1513 WMC PVR for Kodi
1614
0 usr/lib/*/addons/pvr.wmc/pvr.wmc.so* usr/lib/kodi/addons/pvr.wmc
1 usr/share/kodi/addons/pvr.wmc
0 usr/lib
1 usr/share
1212 dh $@
1313
1414 override_dh_auto_configure:
15 dh_auto_configure -- -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=1 -DUSE_LTO=1
15 dh_auto_configure -- -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUILD_SHARED_LIBS=1 -DUSE_LTO=1
1616
1717 override_dh_strip:
1818 dh_strip -pkodi-pvr-wmc --dbg-package=kodi-pvr-wmc-dbg
0 <?xml version="1.0" encoding="UTF-8"?>
0 <?xml version="1.0" encoding="UTF-8"?>
11 <addon
22 id="pvr.wmc"
3 version="1.4.4"
3 version="2.4.5"
44 name="PVR WMC Client"
55 provider-name="KrustyReturns and scarecrow420">
6 <requires>
7 <c-pluff version="0.1"/>
8 <import addon="xbmc.pvr" version="5.2.0"/>
9 </requires>
6 <requires>@ADDON_DEPENDS@</requires>
107 <extension
118 point="xbmc.pvrclient"
129 library_@PLATFORM@="@LIBRARY_FILENAME@"/>
1310 <extension point="xbmc.addon.metadata">
1411 <summary lang="af_ZA">PVR WMC Kliënt</summary>
1512 <summary lang="am_ET">የ PVR WMC ደንበኛ</summary>
16 <summary lang="bg_BG">WMC ПВР клиент</summary>
13 <summary lang="bg_BG">Клиента за ПВР „WMC“</summary>
1714 <summary lang="ca_ES">Client PVR WMC</summary>
18 <summary lang="cs_CZ">PVR WMC klient</summary>
19 <summary lang="cy_GB">Cleient Recordydd WMC</summary>
15 <summary lang="cs_CZ">Klient PVR WMC</summary>
16 <summary lang="cy_GB">Cleiant WMC PVR</summary>
2017 <summary lang="da_DK">PVR WMC klient</summary>
2118 <summary lang="de_DE">PVR WMC-Client</summary>
2219 <summary lang="el_GR">Πελάτης PVR του WMC</summary>
2724 <summary lang="es_AR">Cliente PVR WMC</summary>
2825 <summary lang="es_ES">Cliente PVR WMC</summary>
2926 <summary lang="es_MX">Cliente PVR WMC</summary>
30 <summary lang="fi_FI">PVR WMC asiakas</summary>
27 <summary lang="et_EE">PVR WMC klient</summary>
28 <summary lang="fi_FI">Kodin WMC-asiakasohjelma</summary>
3129 <summary lang="fr_CA">Client de numériscope pour CMW</summary>
3230 <summary lang="fr_FR">Client enregistreur vidéo (PVR) WMC</summary>
3331 <summary lang="gl_ES">Cliente PVR do WMC</summary>
3533 <summary lang="hr_HR">PVR WMC klijent</summary>
3634 <summary lang="hu_HU">PVR WMC Kliens</summary>
3735 <summary lang="id_ID">Klien PVR WMC</summary>
38 <summary lang="is_IS">PVR WMC Biðlari</summary>
36 <summary lang="is_IS">PVR WMC upptökubiðlari</summary>
3937 <summary lang="it_IT">Client PVR WMC</summary>
4038 <summary lang="ko_KR">PVR WMC 클라이언트</summary>
4139 <summary lang="lt_LT">PVR WMC klientas</summary>
4341 <summary lang="mk_MK">PVR WMC клиент</summary>
4442 <summary lang="ms_MY">Klien PVR WMC</summary>
4543 <summary lang="mt_MT">Klijent tal-PVR WMC</summary>
46 <summary lang="nb_NO">PVR WMC klient</summary>
44 <summary lang="nb_NO">PVR WMC-klient</summary>
4745 <summary lang="nl_NL">PVR WMC Cliënt</summary>
4846 <summary lang="pl_PL">Klient telewizji dla WMC</summary>
4947 <summary lang="pt_BR">Cliente de PVR WMC</summary>
5553 <summary lang="sr_RS">PVR WMC Клијент</summary>
5654 <summary lang="sr_RS@latin">PVR WMC Klijent</summary>
5755 <summary lang="sv_SE">PVR WMC-klient</summary>
56 <summary lang="szl">Klijynt telewizyje dlŏ WMC</summary>
5857 <summary lang="te_IN">PVR WMC క్లయింట్</summary>
5958 <summary lang="tr_TR">PVR WMC İstemcisi</summary>
6059 <summary lang="uk_UA">Клієнт PVR WMC</summary>
6160 <summary lang="zh_CN">WMC PVR 客户端</summary>
61 <summary lang="zh_TW">PVR WMC用戶端</summary>
6262 <description lang="af_ZA">@OS@ @ARCHITECTURE@ Weergawe. 'n PVR kliënt om met Windows Media Center Recording en EPG dienste te skakel. Dankie vir Tomba73 en Hoopsdavis. Spesiale dankie aan DBurckh.</description>
63 <description lang="bg_BG">@OS@ @ARCHITECTURE@ издание. ПВР клиент, който работи с услугите на Windows Media Center за записване и електронния програмен справочник. Благодарение на Tomba73 и Hoopsdavis. Специални благодарности на DBurckh.</description>
64 <description lang="cs_CZ">Edice pro @OS@ @ARCHITECTURE@. PVR klient pro použití nahrávacích a EPG služeb Windows Media Centra. Díky pro Tomba73 a Hoopsdavis. Speciální díky pro DBurckh.</description>
63 <description lang="bg_BG">Издание за @OS@ – @ARCHITECTURE@. Клиент за ПВР, който работи с услугите на „Windows Media Center“ за записване и електронен програмен справочник. Благодарности на Tomba73 и Hoopsdavis. Специални благодарности на DBurckh.</description>
64 <description lang="cs_CZ">Edice pro @OS@ @ARCHITECTURE@. Klient PVR pro rozhraní služeb nahrávání a televezního programu Windows Media Centra. Díky pro Tomba73 a Hoopsdavis. Speciální díky pro DBurckh.</description>
6565 <description lang="da_DK">@OS@ @ARCHITECTURE@ VERSION. En PVR klient der interagere med Windows Media Centers optagelse og EPG services. Tak til Tomba73 og Hoopsdavis. En speciel tak til DBurckh.</description>
6666 <description lang="de_DE">@OS@ @ARCHITECTURE@ Edition. Ein PVR-Client zur Verknüpfung mit den Aufnahme- und EPG-Diensten des Windows Media Centers. Dank an Tomba73 und Hoopsdavis. Besonderer Dank an DBurckh.</description>
6767 <description lang="el_GR">Έκδοση @OS@ @ARCHITECTURE@. Ένας πελάτης PVR για διασύνδεση με τις υπηρεσίες Εγγραφής και EPG του Windows Media Center. Ευχαριστούμε τους Tomba73 και Hoopsdavis. Ένα ιδιαίτερο ευχαριστώ στον DBurckh.</description>
7171 <description lang="en_US">@OS@ @ARCHITECTURE@ Edition. A PVR client to interface with Windows Media Center's Recording and EPG services. Thanks to Tomba73 and Hoopsdavis. Special thanks to DBurckh.</description>
7272 <description lang="es_AR">Edición @OS@ @ARCHITECTURE@. Un cliente A PVR para interactuar con los servicios Recording &amp; EPG de Windows Media Center. Gracias a Tomba73 y Hoopsdavis. Agradecimientos especiales a DBurckh.</description>
7373 <description lang="es_ES">Edición @OS@ @ARCHITECTURE@. Un cliente PVR que hace de interface con los servicios de grabación y EPG de Windows Media Center. Agradecimientos a Tomba73 y Hoopsdavis. Agradecimientos especiales a DBurckh.</description>
74 <description lang="fi_FI">@OS@ @ARCHITECTURE@ -versio. Tämä PVR-lisäosa toimii Windows Media Centerin kanssa. Kiitokset Tomba 73:lle ja Hoopsdavisille. Erityiskiitokset DBurckhille.</description>
75 <description lang="fr_CA">Édition @ARCHITECTURE@ @SE@. Un client de numériscope pour interfacer avec les services d'enregistrement et de GÉP du Centre Multimédia Windows. Merci à Tomba73 et Hoopsdavis. Un grand merci à DBurckh.</description>
74 <description lang="es_MX">@OS@ @ARCHITECTURE@ Edition. Un cliente PVR para interactuar con los servicios de Grabación y EPG de Windows Media Center. Gracias a Tomba73 y Hoopsdavis. Gracias especiales a DBurckh.</description>
75 <description lang="fi_FI">@OS@ @ARCHITECTURE@ -versio. Tämä PVR-asiakasohjelma on tarkoitettu käytettäväksi yhdessä Windows Media Centerin kanssa. Kiitokset Tomba 73:lle ja Hoopsdavisille. Erityiskiitokset DBurckhille.</description>
76 <description lang="fr_CA">Édition @ARCHITECTURE@ @SE@. Un client de numériscope pour interfacer avec les services d’enregistrement et de GÉP du Centre Multimédia Windows. Merci à Tomba73 et Hoopsdavis. Un grand merci à DBurckh.</description>
7677 <description lang="fr_FR">Édition @OS@ @ARCHITECTURE@. Un client enregistreur vidéo (PVR) s'interfaçant avec les services d'enregistrement et de guide électronique des programmes TV de Windows Media Center. Merci à Tomba73 et Hoopsdavis. Un merci spécial à DBurckh.</description>
7778 <description lang="gl_ES">Edición @OS@ @ARCHITECTURE@. Un cliente PVR para os servizos de Gravación e Guía do Windows Media Center. Grazas a Tomba73 e Hoopsdavis. Grazas especiais a DBurckh.</description>
7879 <description lang="he_IL">גרסת @OS@ @ARCHITECTURE@. לקוח טלוויזיה חיה של Windows Media Center. תומך בהזרמת שידורים חיים והקלטות, הצגת לוח שידורים ותזמון הקלטות.</description>
7980 <description lang="hr_HR">@OS@ @ARCHITECTURE@ izdanje. PVR klijent za povezivanje sa snimanjima i EPG uslugom Windows Media Centra.. Zahvaljujemo Tomba73 i Hoopsdavis. Posebna zahvala DBurckh.</description>
8081 <description lang="hu_HU">@OS@ @ARCHITECTURE@ Kiadás. Egy PVR kliens a Windows Media Center felvételeihez és EPG szolgáltatáshoz. Köszönet: JeffreyF, Tomba73, Hoopsdavis. Különleges köszönet: DBurckh.</description>
8182 <description lang="id_ID">Edisi @OS@ @ARCHITECTURE@. Sebuah klien PVR untuk berhubungan dengan Perekaman Windows Media Center dan layanan EPG. Terimakasih untuk Tomba73 dan Hoopsdavis. Terimakasih khusus untuk DBurckh.</description>
82 <description lang="is_IS">@OS@ @ARCHITECTURE@ Útgáfa. PVR Biðlari til að tala við Windows Media Center's Upptöku og rafræna dagskrárþjónustur. Þakkir fá Tomba73 og Hoopsdavis. Sérstakar þakkir fær DBurckh.</description>
83 <description lang="is_IS">@OS@ @ARCHITECTURE@ útgáfa. PVR-biðlari til að tala við Windows Media Center's upptöku og rafræna dagskrárþjónustur. Þakkir fá Tomba73 og Hoopsdavis. Sérstakar þakkir fær DBurckh.</description>
8384 <description lang="it_IT">Edizione @OS@ @ARCHITECTURE@. Un client PVR per interfacciarsi con i servizi di registrazione ed EPG di Windows Media Center. Grazie a Tomba73 e Hoopsdavis. Un ringraziamento speciale a DBurckh.</description>
8485 <description lang="ko_KR">@OS@ @ARCHITECTURE@ Edition. Windows Media Center의 녹화 및 EPG 서비스와 연결되는 PVR 클라이언트입니다. Tomba73 과 Hoopsdavis 에게 감사드립니다. DBurckh 에게 특별한 감사의 말을 남깁니다.</description>
8586 <description lang="lt_LT">@OS@ @ARCHITECTURE@ leidimas. PVR kliento sąsaja su Windows Media Center's įrašymo ir EPG paslaugomis. Dėkojame Tomba73 ir Hoopsdavis. Ypatingai ačiū DBurckh.</description>
8990 <description lang="mt_MT">Edizzjoni @OS@ @ARCHITECTURE@. Klijent tal-PVR biex jikkoordina mas-servizzi ta rekording u EPG tal- Windows Media Centre. Grazzi lil Tomba73 u lil Hoopsdavis. Grazzi b'mod speċjali lil DBurckh.</description>
9091 <description lang="nb_NO">@OS@ @ARCHITECTURE@ Versjon. En PVR-klient som gir grensesnitt med Windows Mediasenters opptak og EPG-tjenester. Takk til Tomba73 og Hoopsdavis. Spesiellt takk til DBurckh</description>
9192 <description lang="nl_NL">@OS@ @ARCHITECTUUR@ Editie. Een PVR-cliënt om te samen te werken met Windows Mediacenters opname en EPG-diensten, dank aan Tomba73 and Hoopsdavis. Speciale dank gaat uit naar DBurckh.</description>
92 <description lang="pl_PL">Edycja dla @OS@ @ARCHITECTURE@. Klient telewizji dla Windows Media Center. Podziękowania dla Tomba73 i Hoopsdavis. Specjalne podziękowania dla DBurckh.</description>
93 <description lang="pl_PL">Edycja dla @OS@ @ARCHITECTURE@. Klient telewizji dla Windows Media Center i usług przewodnika telewizyjnego. Podziękowania dla Tomba73 i Hoopsdavis. Specjalne podziękowania dla DBurckh.</description>
9394 <description lang="pt_BR">Edição @OS@ @ARCHITECTURE@. Um cliente de PVR para fazer a ponte com recurso de gravação e serviços de EPG do Windows Media Center. Obrigado Tomba73 e Hoopsdavis. Agradecimento Especial a DBurckh.</description>
9495 <description lang="pt_PT">Edição @OS@ @ARCHITECTURE@. Um cliente de PVR para fazer a interface com a gravação e serviços de EPG do Windows Media Center. Obrigado a Tomba73 e Hoopsdavis. Um agradecimento especial a DBurckh.</description>
9596 <description lang="ro_RO">Ediția @OS@ @ARCHITECTURE@. Un client PVR client pentru conectarea cu înregistrările și serviciile EPG ale Windows Media Center. Mulțumiri lui Tomba73 și Hoopsdavis. Mulțumiri speciale lui DBurckh.</description>
99100 <description lang="sr_RS">@OS@ARCHITECTURE@ издање. PVR клијент за повезивање са Windows Media Center сервисима снимања и EPG . Хвала Tomba73 и Hoopsdavis. Посебно хвала DBurckh.</description>
100101 <description lang="sr_RS@latin">@OS@ @ARCHITECTURE@ izdanje. PVR klijent za povezivanje sa Windows Media Center servisima snimanja i EPG. Hvala Tomba73 i Hoopsdavis. Posebno hvala DBurckh.</description>
101102 <description lang="sv_SE">@OS@ @ARCHITECTURE@ Utgåva. En PVR-klient för att hantera Windows Media Centers inspelnings- och EPG-tjänst. Tack till Tomba73 och Hoopsdavis. Speciellt tack till DBurckh.</description>
103 <description lang="szl">Edycyjŏ dlŏ @ÔS@ @ARCHITECTURE@. Klijynt telewizyje dlŏ Windows Mydia Center. Podziyńkowania dlŏ Tomba73 i Hoopsdavis. Ekstra podziyńkowania dlŏ DBurckh.</description>
102104 <description lang="te_IN">@ OS @ @ ఆర్కిటెక్చర్ @ ఎడిషన్. PVR క్లయింట్ విండోస్ మీడియా సెంటర్ యొక్క రికార్డింగ్ మరియు EPG సేవలు ఇంటర్ఫేస్. Tomba73 మరియు Hoopsdavis ధన్యవాదాలు. DBurckh ప్రత్యేక ధన్యవాదాలు.</description>
103105 <description lang="tr_TR">@OS@ @ARCHITECTURE@ Sürümü. Windows Media Center ve EPG hizmetleri ile arayüz oluşturmak üzere bir PVR istemcisi. Tomba73 ve Hoopsdavis'e teşekkürler. Özel teşekkürlerimiz: DBurckh'a.</description>
104106 <description lang="zh_CN">@OS@ @ARCHITECTURE@ 版。针对 Windows 媒体中心录像和电子节目单服务的 PVR 客户端界面。感谢 Tomba73 和 Hoopsdavis,特别感谢 DBurckh。</description>
107 <description lang="zh_TW">@OS@ @ARCHITECTURE@ Edition. 為與Windows Media Center的錄影及電子節目表服務界接而開發的用戶端軟體。感謝Tomba73及Hoopsdavis。特別鳴謝DBurckh。</description>
105108 <disclaimer lang="af_ZA">Hierdie is eksperimentele sagteware. Gebruik op jou eie risiko.</disclaimer>
106109 <disclaimer lang="bg_BG">Това е експериментален софтуер. Ползвайте го на свой собствен риск.</disclaimer>
107 <disclaimer lang="cs_CZ">Toto je experimentální software. Použití je na vlastní riziko.</disclaimer>
110 <disclaimer lang="ca_ES">Aquest és programari experimental. Utilitzeu-lo sota la vostra responsabilitat.</disclaimer>
111 <disclaimer lang="cs_CZ">Toto je experimentální software. Používejte na vlastní riziko.</disclaimer>
112 <disclaimer lang="cy_GB">Meddalwedd arbrofol yw hon. Defnyddiwch gyda synnwyr cyffredin.</disclaimer>
108113 <disclaimer lang="da_DK">Dette er software under udvikling. Brug på eget ansvar.</disclaimer>
109114 <disclaimer lang="de_DE">Dies ist eine experimentelle Software. Benutzung auf eigene Gefahr.</disclaimer>
110115 <disclaimer lang="el_GR">Δοκιμαστική εφαρμογή. Χρησιμοποιήστε τη υπ' ευθύνη σας.</disclaimer>
115120 <disclaimer lang="es_AR">Este software es experimental. Úselo bajo su propio riesgo.</disclaimer>
116121 <disclaimer lang="es_ES">Es un programa experimental. Úsalo bajo tu responsabilidad.</disclaimer>
117122 <disclaimer lang="es_MX">Este es software experimental. Usalo bajo tu propio riesgo.</disclaimer>
118 <disclaimer lang="fi_FI">Tämä on kokeellista ohjelmistoa. Käytä omalla vastuulla.</disclaimer>
123 <disclaimer lang="fi_FI">Tämä on epävakaa ohjelma! Sen tekijät eivät ole millään muotoa vastuussa epäonnistuneista tallennuksista, virheellisistä ajastuksista, haaskatusta ajasta, verenpaineen noususta tai mistään muusta epäsuotuisasta vaikutuksesta.</disclaimer>
119124 <disclaimer lang="fr_CA">Ce logiciel est expérimental. Utilisez à vos propres risques.</disclaimer>
120125 <disclaimer lang="fr_FR">Logiciel expérimental. À utiliser à vos risques et périls.</disclaimer>
121126 <disclaimer lang="gl_ES">Aínda se está no desenvolvemento. Usar baixo o seu propio risco.</disclaimer>
137142 <disclaimer lang="pl_PL">Oprogramowanie nadal jest w fazie rozwoju i jest niestabilne! Autorzy w żaden sposób nie są odpowiedzialni za nieudane nagrania, błędy w harmonogramie nagrań, zmarnowany czas ani jakiekolwiek inne niepożądane efekty.</disclaimer>
138143 <disclaimer lang="pt_BR">Este é um trabalho em progresso. Use a seu próprio risco</disclaimer>
139144 <disclaimer lang="pt_PT">Este software é experimental. Use-o por sua conta e risco.</disclaimer>
140 <disclaimer lang="ro_RO">Acesta este software experimental. Folosiți-l pe riscul dumneavoastră.</disclaimer>
145 <disclaimer lang="ro_RO">Această parte din program nu este stabilă. Folosiți-o pe riscul dumneavoastră.</disclaimer>
141146 <disclaimer lang="ru_RU">Это экспериментальное ПО. Используйте под свою ответственность.</disclaimer>
142147 <disclaimer lang="sk_SK">Toto je experimentálny softvér. Používajte ho preto na vlastné riziko.</disclaimer>
143148 <disclaimer lang="sl_SI">To je eksperimentalna programska oprema. Uporaba na lastno odgovornost.</disclaimer>
144149 <disclaimer lang="sr_RS">Ово је експериментални софтвер. Користите на свој ризик.</disclaimer>
145150 <disclaimer lang="sr_RS@latin">Ovo je eksperimentalni softver. Koristite na svoj rizik.</disclaimer>
146151 <disclaimer lang="sv_SE">Detta är en experimentell mjukvara. Används på egen risk.</disclaimer>
152 <disclaimer lang="szl">Software durch je w fazie rozrostu i je niysztabilne! Autory w żŏdyn knif niy sōm ôdpedzialni za niypodarzōne nagrania, felery w harmōnogramie nagrań, stracōny czŏs ani jaki ino inksze niynazdane efekty.</disclaimer>
147153 <disclaimer lang="te_IN">ఈ ప్రయోగాత్మక సాఫ్ట్వేర్. మీ స్వంత పూచీకత్తుతో ఉపయోగించండి.</disclaimer>
148154 <disclaimer lang="tr_TR">Bu deneysel bir yazılımdır. Kullanım riski kendi sorumluluğunuzdadır.</disclaimer>
149155 <disclaimer lang="uk_UA">Це експериментальне програмне забезпечення. Використовуйте на свій страх і ризик.</disclaimer>
150156 <disclaimer lang="zh_CN">试验性软件,使用风险自担。</disclaimer>
151 <disclaimer lang="zh_TW">這是開發中的工作。使用上您須自行考慮到可能有的風險。</disclaimer>
157 <disclaimer lang="zh_TW">這是開發中的軟體。使用上您須自行考慮到可能有的風險。</disclaimer>
152158 <platform>@PLATFORM@</platform>
153159 </extension>
154160 </addon>
0 2.4.5
1 - Update build sytem version
2 - Update addon interface header usage
3
4 2.4.4
5 - implemented GetRecordingEdl
6
7 2.4.0
8 - implemented GetStreamTimes, removed BufferTime functions
9
10 2.3.0
11 - Updated to PVR addon API v5.10.0
12
13 2.2.6
14 - Updated to PVR addon API v5.9.0
15
16 2.2.0
17 - Updated to PVR addon API v5.7.0
18
19 2.1.0
20 - Updated to PVR addon API v5.3.0
21
22 2.0.5
23 - Remove of never used addon interface function
24
25 2.0.4
26 - Update Debian package control
27 - PVR addon callback way changes
28
29 2.0.3
30 - Removed old no more needed version functions
31
32 2.0.2
33 - Set dependency versions automatic during build
34 - Removed never used kodi to addon functions
35 - Build system fixes
36
37 2.0.1
38 - Updated Language files from Transifex
39
40 2.0.0
41 - Initial Kodi v18 version
42
043 1.4.4
144 - Updated Language files from Transifex
245
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
5555 msgid "Anytime"
5656 msgstr "በማንኛውም ጊዜ"
5757
58 msgctxt "#30120"
59 msgid "Delete Timer"
60 msgstr "መቁጠሪያውን ማጥፊያ"
61
5862 msgctxt "#30122"
5963 msgid "Delete the entire series"
6064 msgstr "በጠቅላላ ተከታታዩን ማጥፊያ"
65
66 msgctxt "#30131"
67 msgid "One time (manual)"
68 msgstr "አንድ ጊዜ (በ እጅ)"
69
70 msgctxt "#30132"
71 msgid "One time (guide)"
72 msgstr "አንድ ጊዜ (መምሪያ)"
6173
6274 msgctxt "#30140"
6375 msgid "Normal"
7082 msgctxt "#30142"
7183 msgid "Low"
7284 msgstr "ዝቅተኛ "
85
86 msgctxt "#30152"
87 msgid "Live Only"
88 msgstr "በቀጥታ የሚተላለፍ ብቻ"
89
90 msgctxt "#30160"
91 msgid "Not Set"
92 msgstr "አልተሰናዳም"
93
94 msgctxt "#30165"
95 msgid "Keep For 1 Week"
96 msgstr "ለ 1 ሳምንት ማቆያ"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1717
1818 msgctxt "#30000"
1919 msgid "Server Hostname or IP"
20 msgstr "Хост или IP адрес на сървъра"
20 msgstr "Име на хоста или IP адрес на сървъра"
2121
2222 msgctxt "#30001"
2323 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Нека IP адреса бъде 127.0.0.1, ако сървъра работи на същата система"
24 msgstr "IP адресът да бъде 127.0.0.1, ако сървърът работи на същата система"
2525
2626 msgctxt "#30002"
2727 msgid "Port Number"
2929
3030 msgctxt "#30003"
3131 msgid "Stream timeout, unknown problem"
32 msgstr "Времето за изчакване на потока изтече. Неизвестен проблем"
32 msgstr "Времето за изчакване на потока изтече. Има неизвестен проблем."
3333
3434 msgctxt "#30004"
3535 msgid "No video data found on this channel"
6161
6262 msgctxt "#30011"
6363 msgid "Can't start, tuner is no longer available"
64 msgstr "Не може да започне. Тунерът вече не наличен."
64 msgstr "Стартирането е невъзможно. Тунерът вече не наличен."
6565
6666 msgctxt "#30012"
6767 msgid "Channel content is protected"
7373
7474 msgctxt "#30014"
7575 msgid "Enable SignalStatus calls"
76 msgstr "Включи проверките за състояние на сигнала"
76 msgstr "Проверки на състоянието на сигнала"
7777
7878 msgctxt "#30015"
7979 msgid "Refresh SignalStatus Interval (sec)"
80 msgstr "Интервал за проверка на състоянието на сигнала (с)"
80 msgstr "Интервал за проверка на състоянието на сигнала (сек)"
8181
8282 msgctxt "#30016"
8383 msgid "Store Resume/Watched status on server"
84 msgstr "Пази информация за Възобновяване/Гледано на сървъра"
84 msgstr "Пазене не инф. за възобновяване/изгледано на сървъра"
8585
8686 msgctxt "#30017"
8787 msgid "Recorded TV folder not found"
8989
9090 msgctxt "#30018"
9191 msgid "Recorded TV folder cannot be opened"
92 msgstr "Папката със записана Тв не може да бъде отворена"
92 msgstr "Папката със записана ТВ не може да бъде отворена"
9393
9494 msgctxt "#30019"
9595 msgid "ServerWMC version update is available (%s)"
96 msgstr "Налична е актуализация на ServerWMC (%s)"
96 msgstr "Налична е актуализация на сървър WMC (%s)"
9797
9898 msgctxt "#30020"
9999 msgid "All tuners for this channel are busy"
113113
114114 msgctxt "#30024"
115115 msgid "Recording stream exited early"
116 msgstr "Потока за запис приключи преждевременно"
116 msgstr "Потокът за запис приключи преждевременно"
117117
118118 msgctxt "#30025"
119119 msgid "Use WakeOnLAN to wake up server"
120 msgstr "Използвай събуждане по LAN, за да събудиш сървъра"
120 msgstr "Да се използва включване по LAN за събуждане на сървъра"
121121
122122 msgctxt "#30026"
123123 msgid "Sending WakeOnLAN to server..."
124 msgstr "Изпращане на събуждане по LAN към сървъра..."
124 msgstr "Изпращане на сигнал за включване по LAN към сървъра…"
125125
126126 msgctxt "#30027"
127127 msgid "Time drift between client and backend of %s minutes"
133133
134134 msgctxt "#30101"
135135 msgid "Record this episode only"
136 msgstr "Запиши само този епизод"
136 msgstr "Запис само на този епизод"
137137
138138 msgctxt "#30102"
139139 msgid "Record the series"
140 msgstr "Запиши сериала"
140 msgstr "Запис на сериала"
141141
142142 msgctxt "#30103"
143143 msgid "Show type:"
144 msgstr "Покажи следните видове:"
144 msgstr "Да се показват:"
145145
146146 msgctxt "#30104"
147147 msgid "New and rerun"
169169
170170 msgctxt "#30111"
171171 msgid "Anytime"
172 msgstr "Всеки път"
172 msgstr "По всяко време"
173173
174174 msgctxt "#30120"
175175 msgid "Delete Timer"
176 msgstr "Изтрий брояча"
176 msgstr "Изтриване на брояча"
177177
178178 msgctxt "#30121"
179179 msgid "Delete this episode timer only"
180 msgstr "Изтрий само брояча на този епизод"
180 msgstr "Изтриване на брояча само за този епизод"
181181
182182 msgctxt "#30122"
183183 msgid "Delete the entire series"
184 msgstr "Изтрий целия сериал"
184 msgstr "Изтриване на целия сериал"
185
186 msgctxt "#30130"
187 msgid "Created by Repeating Timer"
188 msgstr "Създадено от повтарящ се брояч"
189
190 msgctxt "#30131"
191 msgid "One time (manual)"
192 msgstr "Еднократно (ръчно)"
193
194 msgctxt "#30132"
195 msgid "One time (guide)"
196 msgstr "Еднократно (справочник)"
197
198 msgctxt "#30133"
199 msgid "One time (wishlist)"
200 msgstr "Еднократно (списък с желания)"
201
202 msgctxt "#30134"
203 msgid "Repeating (manual)"
204 msgstr "Повтаряемо (ръчно)"
205
206 msgctxt "#30135"
207 msgid "Repeating (guide)"
208 msgstr "Повтаряемо (справочник)"
209
210 msgctxt "#30136"
211 msgid "Repeating (wishlist)"
212 msgstr "Повтаряемо (списък с желания)"
185213
186214 msgctxt "#30140"
187215 msgid "Normal"
195223 msgid "Low"
196224 msgstr "Ниско"
197225
226 msgctxt "#30150"
227 msgid "New Episodes Only"
228 msgstr "Само нови епизоди"
229
230 msgctxt "#30151"
231 msgid "New and Rerun Episodes"
232 msgstr "Нови епизоди и повторения"
233
234 msgctxt "#30152"
235 msgid "Live Only"
236 msgstr "Само на живо"
237
198238 msgctxt "#30160"
199239 msgid "Not Set"
200 msgstr "Няма поредица"
240 msgstr "Не е зададено"
241
242 msgctxt "#30161"
243 msgid "Keep Latest Recordings"
244 msgstr "Съхраняване на последните записи"
245
246 msgctxt "#30162"
247 msgid "Keep Until I Watch"
248 msgstr "Съхраняване докато не бъдат изгледани"
249
250 msgctxt "#30163"
251 msgid "Keep Until Space Needed"
252 msgstr "Съхраняване докато няма недостиг на място"
253
254 msgctxt "#30164"
255 msgid "Keep Until I Delete"
256 msgstr "Съхраняване докато не бъдат изтрити"
257
258 msgctxt "#30165"
259 msgid "Keep For 1 Week"
260 msgstr "Съхраняване за 1 седмица"
261
262 msgctxt "#30170"
263 msgid "Keep As Many As Possible"
264 msgstr "Съхраняване на възможно най-много"
265
266 msgctxt "#30171"
267 msgid "Keep 1 Recording"
268 msgstr "Съхраняване на 1 запис"
269
270 msgctxt "#30172"
271 msgid "Keep 2 Recordings"
272 msgstr "Съхраняване на 2 записа"
273
274 msgctxt "#30173"
275 msgid "Keep 3 Recordings"
276 msgstr "Съхраняване на 3 записа"
277
278 msgctxt "#30174"
279 msgid "Keep 4 Recordings"
280 msgstr "Съхраняване на 4 записа"
281
282 msgctxt "#30175"
283 msgid "Keep 5 Recordings"
284 msgstr "Съхраняване на 5 записа"
285
286 msgctxt "#30176"
287 msgid "Keep 6 Recordings"
288 msgstr "Съхраняване на 6 записа"
289
290 msgctxt "#30177"
291 msgid "Keep 7 Recordings"
292 msgstr "Съхраняване на 7 записа"
293
294 msgctxt "#30178"
295 msgid "Keep 10 Recordings"
296 msgstr "Съхраняване на 10 записа"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1717
1818 msgctxt "#30000"
1919 msgid "Server Hostname or IP"
20 msgstr "Nom de màquina o IP del servidor"
20 msgstr "Nom d'amfitrió o IP del servidor"
21
22 msgctxt "#30001"
23 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Mantén les adreces IP a 127.0.0.1, si el servidor s'està executant en el mateix sistema"
2125
2226 msgctxt "#30002"
2327 msgid "Port Number"
2428 msgstr "Número de port"
2529
30 msgctxt "#30003"
31 msgid "Stream timeout, unknown problem"
32 msgstr "Temps d'expiració de la transmissió, problema desconegut"
33
2634 msgctxt "#30004"
2735 msgid "No video data found on this channel"
2836 msgstr "No s'ha trobat vídeo en aquest canal"
4351 msgid "Recording file not found"
4452 msgstr "Fitxer de l'enregistrament no trobat"
4553
54 msgctxt "#30011"
55 msgid "Can't start, tuner is no longer available"
56 msgstr "No es pot iniciar, el sintonitzador ja no està disponible"
57
58 msgctxt "#30012"
59 msgid "Channel content is protected"
60 msgstr "El contingut del canal està protegit"
61
62 msgctxt "#30014"
63 msgid "Enable SignalStatus calls"
64 msgstr "Habilita les crides SignalStatus"
65
66 msgctxt "#30016"
67 msgid "Store Resume/Watched status on server"
68 msgstr "Emmagatzema l'estat reprèn/vist al servidor"
69
70 msgctxt "#30025"
71 msgid "Use WakeOnLAN to wake up server"
72 msgstr "Utilitza WakeOnLAN per despertar el servidor"
73
74 msgctxt "#30026"
75 msgid "Sending WakeOnLAN to server..."
76 msgstr "S'està enviant WakeOnLAN al servidor..."
77
4678 msgctxt "#30100"
4779 msgid "Recording Preference"
4880 msgstr "Preferència d'enregistrament"
4981
82 msgctxt "#30101"
83 msgid "Record this episode only"
84 msgstr "Enregistra únicament aquest episodi"
85
5086 msgctxt "#30102"
5187 msgid "Record the series"
5288 msgstr "Enregistra les sèries"
5389
5490 msgctxt "#30103"
5591 msgid "Show type:"
56 msgstr "Tipus de Xou:"
92 msgstr "Tipus de programa de TV:"
5793
5894 msgctxt "#30105"
5995 msgid "New only"
83119 msgid "Delete Timer"
84120 msgstr "Elimina Comptador"
85121
122 msgctxt "#30122"
123 msgid "Delete the entire series"
124 msgstr "Suprimeix les sèries completes"
125
126 msgctxt "#30131"
127 msgid "One time (manual)"
128 msgstr "Un cop (manual)"
129
130 msgctxt "#30132"
131 msgid "One time (guide)"
132 msgstr "Un cop (guia)"
133
134 msgctxt "#30134"
135 msgid "Repeating (manual)"
136 msgstr "Repetició"
137
138 msgctxt "#30135"
139 msgid "Repeating (guide)"
140 msgstr "Repetició (guia)"
141
86142 msgctxt "#30140"
87143 msgid "Normal"
88144 msgstr "Normal"
89145
90146 msgctxt "#30141"
91147 msgid "High"
92 msgstr "Màx."
148 msgstr "Alt"
93149
94150 msgctxt "#30142"
95151 msgid "Low"
96 msgstr "Mín."
152 msgstr "Baix"
153
154 msgctxt "#30150"
155 msgid "New Episodes Only"
156 msgstr "Únicament els episodis nous"
157
158 msgctxt "#30152"
159 msgid "Live Only"
160 msgstr "Només en directe"
161
162 msgctxt "#30160"
163 msgid "Not Set"
164 msgstr "Sense establir"
165
166 msgctxt "#30161"
167 msgid "Keep Latest Recordings"
168 msgstr "Mantén els últims enregistraments"
169
170 msgctxt "#30162"
171 msgid "Keep Until I Watch"
172 msgstr "Mantén fins que el miri"
173
174 msgctxt "#30163"
175 msgid "Keep Until Space Needed"
176 msgstr "Mantén fins que es necessiti espai"
177
178 msgctxt "#30164"
179 msgid "Keep Until I Delete"
180 msgstr "Mantén fins que l'elimini"
181
182 msgctxt "#30165"
183 msgid "Keep For 1 Week"
184 msgstr "Mantén durant 1 setmana"
185
186 msgctxt "#30170"
187 msgid "Keep As Many As Possible"
188 msgstr "Mantén tant com puguis"
189
190 msgctxt "#30171"
191 msgid "Keep 1 Recording"
192 msgstr "Mantén 1 enregistrament"
193
194 msgctxt "#30172"
195 msgid "Keep 2 Recordings"
196 msgstr "Mantén 2 enregistraments"
197
198 msgctxt "#30173"
199 msgid "Keep 3 Recordings"
200 msgstr "Mantén 3 enregistraments"
201
202 msgctxt "#30174"
203 msgid "Keep 4 Recordings"
204 msgstr "Mantén 4 enregistraments"
205
206 msgctxt "#30175"
207 msgid "Keep 5 Recordings"
208 msgstr "Mantén 5 enregistraments"
209
210 msgctxt "#30176"
211 msgid "Keep 6 Recordings"
212 msgstr "Mantén 6 enregistraments"
213
214 msgctxt "#30177"
215 msgid "Keep 7 Recordings"
216 msgstr "Mantén 7 enregistraments"
217
218 msgctxt "#30178"
219 msgid "Keep 10 Recordings"
220 msgstr "Mantén 10 enregistraments"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1717
1818 msgctxt "#30000"
1919 msgid "Server Hostname or IP"
20 msgstr "Název serveru nebo IP adresa"
20 msgstr "Název hostitele nebo adresa IP serveru"
2121
2222 msgctxt "#30001"
2323 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Pokud server běží na stejném systému, ponechte IP adresu 127.0.0.1"
24 msgstr "Pokud server běží na stejném systému, ponechte adresu IP 127.0.0.1"
2525
2626 msgctxt "#30002"
2727 msgid "Port Number"
2929
3030 msgctxt "#30003"
3131 msgid "Stream timeout, unknown problem"
32 msgstr "Stream timeout, neznámý problém"
32 msgstr "Časový limit datového proudu, neznámý problém"
3333
3434 msgctxt "#30004"
3535 msgid "No video data found on this channel"
36 msgstr "Na tomto kanále nebyla nalezena žádná video data"
36 msgstr "Na tomto kanále nebyla nalezena žádná data videa"
3737
3838 msgctxt "#30005"
3939 msgid "Tuner is needed for recording"
40 msgstr "Pro nahrávání je nutný TV tuner"
40 msgstr "Pro nahrávání je nutný tuner"
4141
4242 msgctxt "#30006"
4343 msgid "Recording delete failed, file in use or write protected"
44 msgstr "Smazaní nahrávky se nezdařilo, soubor je používán nebo je chráněn proti zápisu"
44 msgstr "Odstranění nahrávky selhalo, soubor je používán nebo je chráněn proti zápisu"
4545
4646 msgctxt "#30007"
4747 msgid "Recording delete failed, recorded file doesn't exist"
48 msgstr "Smazaní nahrávky se nezdařilo, soubor se záznamem neexistuje"
48 msgstr "Odstranění nahrávky selhalo, soubor s nahrávkou neexistuje"
4949
5050 msgctxt "#30008"
5151 msgid "Recording file not found"
5353
5454 msgctxt "#30009"
5555 msgid "Alternate channel chosen: "
56 msgstr "Vybrán alternativní kanál:"
56 msgstr "Zvolen alternativní kanál:"
5757
5858 msgctxt "#30010"
5959 msgid "Alternate time chosen: "
60 msgstr "Vybrán alternativí čas:"
60 msgstr "Zvolený alternativní čas:"
6161
6262 msgctxt "#30011"
6363 msgid "Can't start, tuner is no longer available"
64 msgstr "Nelze spustit, TV tuner není již k dispozici"
64 msgstr "Nelze spustit, tuner už není dostupný"
6565
6666 msgctxt "#30012"
6767 msgid "Channel content is protected"
6969
7070 msgctxt "#30013"
7171 msgid "End time increased by "
72 msgstr "Čas ukončení prodloužit o "
72 msgstr "Čas ukončení posunut o "
7373
7474 msgctxt "#30014"
7575 msgid "Enable SignalStatus calls"
8181
8282 msgctxt "#30016"
8383 msgid "Store Resume/Watched status on server"
84 msgstr "Uložit čas \"Začít od\" / \"Zhlédnuto\" na serveru"
84 msgstr "Ukládat stav Obnovit a Zhlédnuto na serveru"
8585
8686 msgctxt "#30017"
8787 msgid "Recorded TV folder not found"
88 msgstr "Složka pro TV nahrávky nenalezena"
88 msgstr "Složka pro nahrávky nebyla nalezena"
8989
9090 msgctxt "#30018"
9191 msgid "Recorded TV folder cannot be opened"
92 msgstr "Složku pro TV nahrávky nelze otevřít"
92 msgstr "Složku pro nahrávky nelze otevřít"
9393
9494 msgctxt "#30019"
9595 msgid "ServerWMC version update is available (%s)"
96 msgstr "Pro ServerWMC je k dispozici aktualizace (%s) "
96 msgstr "Pro ServerWMC je dostupná aktualizace (%s) "
9797
9898 msgctxt "#30020"
9999 msgid "All tuners for this channel are busy"
100 msgstr "Všechny TV tunery pro tento kanál jsou zaneprázdněny"
100 msgstr "Všechny tunery pro tento kanál jsou zaneprázdněny"
101101
102102 msgctxt "#30021"
103103 msgid "LiveTV timed-out"
104 msgstr "Timeout LiveTV"
104 msgstr "Překročen časový limit živého vysílání"
105105
106106 msgctxt "#30022"
107107 msgid "LiveTV error, exited early"
108 msgstr "Chyba LiveTV, ukončeno dříve"
108 msgstr "Chyba živého vysílání, ukončeno dříve"
109109
110110 msgctxt "#30023"
111111 msgid "Recording stream timed-out"
112 msgstr "Timeout nahrávání streamu"
112 msgstr "Překročen časový limit nahrávání datového proudu"
113113
114114 msgctxt "#30024"
115115 msgid "Recording stream exited early"
116 msgstr "Nahrávání streamu ukončeno dříve"
116 msgstr "Nahrávání datového proudu ukončeno dříve"
117117
118118 msgctxt "#30025"
119119 msgid "Use WakeOnLAN to wake up server"
120 msgstr "Použít WakeOnLAN k probuzení serveru"
120 msgstr "Server probouzet prostřednictvím sítě (WakeOnLAN)"
121121
122122 msgctxt "#30026"
123123 msgid "Sending WakeOnLAN to server..."
124 msgstr "Posílám WakeOnLAN na server"
124 msgstr "Odesílání WakeOnLAN na server…"
125125
126126 msgctxt "#30027"
127127 msgid "Time drift between client and backend of %s minutes"
128 msgstr "Časový posun mezi klientem a backendem v %s minutách"
128 msgstr "Časový posun mezi klientem a serverem o %s minut"
129129
130130 msgctxt "#30100"
131131 msgid "Recording Preference"
137137
138138 msgctxt "#30102"
139139 msgid "Record the series"
140 msgstr "Nahrát serii"
140 msgstr "Nahrát sezónu"
141141
142142 msgctxt "#30103"
143143 msgid "Show type:"
145145
146146 msgctxt "#30104"
147147 msgid "New and rerun"
148 msgstr "Nové a opakované"
148 msgstr "Nové a reprízované"
149149
150150 msgctxt "#30105"
151151 msgid "New only"
161161
162162 msgctxt "#30108"
163163 msgid "Any Channel"
164 msgstr "Každý kanál"
164 msgstr "Jakýkoliv kanál"
165165
166166 msgctxt "#30110"
167167 msgid "Airtime:"
169169
170170 msgctxt "#30111"
171171 msgid "Anytime"
172 msgstr "Kdykoli"
172 msgstr "Kdykoliv"
173173
174174 msgctxt "#30120"
175175 msgid "Delete Timer"
176 msgstr "Smazat časovač"
176 msgstr "Odstranit časovač"
177177
178178 msgctxt "#30121"
179179 msgid "Delete this episode timer only"
181181
182182 msgctxt "#30122"
183183 msgid "Delete the entire series"
184 msgstr "Smazat celou řadu"
184 msgstr "Odstranit celou sezónu"
185185
186186 msgctxt "#30130"
187187 msgid "Created by Repeating Timer"
188 msgstr "Vytvořeno opakovaným časovačem."
188 msgstr "Vytvořeno opakujícím se časovačem"
189189
190190 msgctxt "#30131"
191191 msgid "One time (manual)"
192 msgstr "Jednou (manuálně)"
192 msgstr "Jednorázově (ručně)"
193193
194194 msgctxt "#30132"
195195 msgid "One time (guide)"
196 msgstr "Jednou (podle programu)"
196 msgstr "Jednorázově (program)"
197197
198198 msgctxt "#30133"
199199 msgid "One time (wishlist)"
201201
202202 msgctxt "#30134"
203203 msgid "Repeating (manual)"
204 msgstr "Opakovaný (manuální)"
204 msgstr "Opakovaný (ručně)"
205205
206206 msgctxt "#30135"
207207 msgid "Repeating (guide)"
208 msgstr "Opakovaný (podle programu)"
208 msgstr "Opakovaný (program)"
209209
210210 msgctxt "#30136"
211211 msgid "Repeating (wishlist)"
225225
226226 msgctxt "#30150"
227227 msgid "New Episodes Only"
228 msgstr "Jen nové epizody"
228 msgstr "Pouze nové epizody"
229229
230230 msgctxt "#30151"
231231 msgid "New and Rerun Episodes"
232 msgstr "Nové i reprízované epizody"
232 msgstr "Nové a reprízované epizody"
233233
234234 msgctxt "#30152"
235235 msgid "Live Only"
236 msgstr "Jen živě"
236 msgstr "Pouze živé"
237237
238238 msgctxt "#30160"
239239 msgid "Not Set"
241241
242242 msgctxt "#30161"
243243 msgid "Keep Latest Recordings"
244 msgstr "Uchovávat poslední nahrávky"
244 msgstr "Ponechávat nejnovější nahrávky"
245245
246246 msgctxt "#30162"
247247 msgid "Keep Until I Watch"
248 msgstr "Uchovávat do zhlédnutí"
248 msgstr "Ponechávat do zhlédnutí"
249249
250250 msgctxt "#30163"
251251 msgid "Keep Until Space Needed"
252 msgstr "Uchovávat dokud není potřeba místo na HDD"
252 msgstr "Ponechávat dokud není potřeba místo"
253253
254254 msgctxt "#30164"
255255 msgid "Keep Until I Delete"
256 msgstr "Uchovávat do smazání"
256 msgstr "Ponechávat do odstranění"
257257
258258 msgctxt "#30165"
259259 msgid "Keep For 1 Week"
260 msgstr "Uchovávat po dobu jednoho týdne"
260 msgstr "Ponechávat 1 týden"
261261
262262 msgctxt "#30170"
263263 msgid "Keep As Many As Possible"
264 msgstr "Uchovávat co nejvíce"
264 msgstr "Ponechávat co nejvíce"
265265
266266 msgctxt "#30171"
267267 msgid "Keep 1 Recording"
268 msgstr "Uchovávat 1 nahrávku"
268 msgstr "Ponechávat 1 nahrávku"
269269
270270 msgctxt "#30172"
271271 msgid "Keep 2 Recordings"
272 msgstr "Uchovávat 2 nahrávky"
272 msgstr "Ponechávat 2 nahrávky"
273273
274274 msgctxt "#30173"
275275 msgid "Keep 3 Recordings"
276 msgstr "Uchovávat 3 nahrávky"
276 msgstr "Ponechávat 3 nahrávky"
277277
278278 msgctxt "#30174"
279279 msgid "Keep 4 Recordings"
280 msgstr "Uchovávat 4 nahrávky"
280 msgstr "Ponechávat 4 nahrávky"
281281
282282 msgctxt "#30175"
283283 msgid "Keep 5 Recordings"
284 msgstr "Uchovávat 5 nahrávek"
284 msgstr "Ponechávat 5 nahrávek"
285285
286286 msgctxt "#30176"
287287 msgid "Keep 6 Recordings"
288 msgstr "Uchovávat 6 nahrávek"
288 msgstr "Ponechávat 6 nahrávek"
289289
290290 msgctxt "#30177"
291291 msgid "Keep 7 Recordings"
292 msgstr "Uchovávat 7 nahrávek"
292 msgstr "Ponechávat 7 nahrávek"
293293
294294 msgctxt "#30178"
295295 msgid "Keep 10 Recordings"
296 msgstr "Uchovávat 10 nahrávek"
296 msgstr "Ponechávat 10 nahrávek"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1414 "Content-Transfer-Encoding: 8bit\n"
1515 "Language: cy_GB\n"
1616 "Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != 11) ? 2 : 3;\n"
17
18 msgctxt "#30000"
19 msgid "Server Hostname or IP"
20 msgstr "Enw Cynhaliwr neu IP y Gweinydd"
21
22 msgctxt "#30001"
23 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Cadwch y cyfeiriad IP yn 127.0.0.1 os bydd gweinydd yn rhedeg ar un system"
25
26 msgctxt "#30002"
27 msgid "Port Number"
28 msgstr "Rhif y Porth"
29
30 msgctxt "#30003"
31 msgid "Stream timeout, unknown problem"
32 msgstr "Terfyn amser ffrydio. Gwall anhysbys"
33
34 msgctxt "#30004"
35 msgid "No video data found on this channel"
36 msgstr "Ni chanfuwyd unrhyw ddata fideo ar y sianel hon"
37
38 msgctxt "#30005"
39 msgid "Tuner is needed for recording"
40 msgstr "Rhaid cael tiwniwr er mwyn recordio"
41
42 msgctxt "#30006"
43 msgid "Recording delete failed, file in use or write protected"
44 msgstr "Nid oes modd dileu'r recordiad. Mae'n cael ei ddefnyddio neu y mae wedi'i ddiogelu."
45
46 msgctxt "#30007"
47 msgid "Recording delete failed, recorded file doesn't exist"
48 msgstr "Nid oes modd dileu'r recordiad. Nid yw'r ffeil yn bodoli"
49
50 msgctxt "#30008"
51 msgid "Recording file not found"
52 msgstr "Ni chanfuwyd ffeil recordio"
53
54 msgctxt "#30009"
55 msgid "Alternate channel chosen: "
56 msgstr "Y sianel amgen a ddewiswyd:"
57
58 msgctxt "#30010"
59 msgid "Alternate time chosen: "
60 msgstr "Yr amser angen a ddewiswyd:"
61
62 msgctxt "#30011"
63 msgid "Can't start, tuner is no longer available"
64 msgstr "Methu dechrau. Nid yw'r tiwniwr ar gael bellach"
65
66 msgctxt "#30012"
67 msgid "Channel content is protected"
68 msgstr "Diogelid cynnwys y sianel"
1769
1870 msgctxt "#30101"
1971 msgid "Record this episode only"
3587 msgid "Delete the entire series"
3688 msgstr "Dileu'r gyfres gyfan"
3789
90 msgctxt "#30131"
91 msgid "One time (manual)"
92 msgstr "Unwaith (â llaw)"
93
94 msgctxt "#30132"
95 msgid "One time (guide)"
96 msgstr "Unwaith (gydag arweiniad)"
97
98 msgctxt "#30134"
99 msgid "Repeating (manual)"
100 msgstr "Ailadrodd (â llaw)"
101
102 msgctxt "#30135"
103 msgid "Repeating (guide)"
104 msgstr "Ailadrodd (gydag arweiniad)"
105
38106 msgctxt "#30140"
39107 msgid "Normal"
40108 msgstr "Normal"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
183183 msgid "Delete the entire series"
184184 msgstr "Delete the entire series"
185185
186 msgctxt "#30135"
187 msgid "Repeating (guide)"
188 msgstr "Gentagende (vejledning)"
189
186190 msgctxt "#30140"
187191 msgid "Normal"
188192 msgstr "Normal"
194198 msgctxt "#30142"
195199 msgid "Low"
196200 msgstr "Lav"
201
202 msgctxt "#30150"
203 msgid "New Episodes Only"
204 msgstr "Kun nye afsnit"
205
206 msgctxt "#30165"
207 msgid "Keep For 1 Week"
208 msgstr "Gem i 1 uge"
209
210 msgctxt "#30171"
211 msgid "Keep 1 Recording"
212 msgstr "Gem 1 optagelse"
213
214 msgctxt "#30172"
215 msgid "Keep 2 Recordings"
216 msgstr "Gem 2 optagelser"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
2727 msgid "Port Number"
2828 msgstr "Numero de Puerto"
2929
30 msgctxt "#30003"
31 msgid "Stream timeout, unknown problem"
32 msgstr "Tiempo de espera de la transmisión, problema desconocido"
33
3034 msgctxt "#30004"
3135 msgid "No video data found on this channel"
3236 msgstr "No se encontraron datos de video en este canal "
6367 msgid "Channel content is protected"
6468 msgstr "El contenido del canal esta protegido"
6569
70 msgctxt "#30013"
71 msgid "End time increased by "
72 msgstr "El tiempo de finalización aumentó"
73
74 msgctxt "#30014"
75 msgid "Enable SignalStatus calls"
76 msgstr "Habilitar llamadas de SignalStatus"
77
78 msgctxt "#30015"
79 msgid "Refresh SignalStatus Interval (sec)"
80 msgstr "Actualizar el intervalo de SignalStatus (seg)"
81
82 msgctxt "#30016"
83 msgid "Store Resume/Watched status on server"
84 msgstr "Almacenar estado reanudar/visto en el servidor"
85
86 msgctxt "#30017"
87 msgid "Recorded TV folder not found"
88 msgstr "Carpeta de TV grabada no encontrada"
89
90 msgctxt "#30018"
91 msgid "Recorded TV folder cannot be opened"
92 msgstr "No se puede abrir la carpeta de TV grabada"
93
94 msgctxt "#30019"
95 msgid "ServerWMC version update is available (%s)"
96 msgstr "La actualización de la versión de ServerWMC está disponible (%s)"
97
98 msgctxt "#30020"
99 msgid "All tuners for this channel are busy"
100 msgstr "Todos los sintonizadores de este canal están ocupados"
101
102 msgctxt "#30021"
103 msgid "LiveTV timed-out"
104 msgstr "Tiempo de espera de LiveTV"
105
106 msgctxt "#30022"
107 msgid "LiveTV error, exited early"
108 msgstr "Error de LiveTV, salió temprano"
109
110 msgctxt "#30023"
111 msgid "Recording stream timed-out"
112 msgstr "Tiempo de espera agotado grabando la transmisión"
113
114 msgctxt "#30024"
115 msgid "Recording stream exited early"
116 msgstr "La transmisión de grabación salió temprano"
117
118 msgctxt "#30025"
119 msgid "Use WakeOnLAN to wake up server"
120 msgstr "Utilice WakeOnLAN para activar el servidor"
121
122 msgctxt "#30026"
123 msgid "Sending WakeOnLAN to server..."
124 msgstr "Enviando WakeOnLAN al servidor ..."
125
126 msgctxt "#30027"
127 msgid "Time drift between client and backend of %s minutes"
128 msgstr "Desviación de la hora entre el cliente y back-end de %s minutos"
129
130 msgctxt "#30100"
131 msgid "Recording Preference"
132 msgstr "Preferencia de grabación"
133
66134 msgctxt "#30101"
67135 msgid "Record this episode only"
68136 msgstr "Grabar solo este episodio"
69137
138 msgctxt "#30102"
139 msgid "Record the series"
140 msgstr "Grabar la serie"
141
142 msgctxt "#30103"
143 msgid "Show type:"
144 msgstr "Mostrar tipo:"
145
146 msgctxt "#30104"
147 msgid "New and rerun"
148 msgstr "Nuevo y repetición"
149
150 msgctxt "#30105"
151 msgid "New only"
152 msgstr "Solo nuevo"
153
154 msgctxt "#30106"
155 msgid "Live only"
156 msgstr "Solo en vivo"
157
70158 msgctxt "#30107"
71159 msgid "Channel:"
72160 msgstr "Canal:"
73161
162 msgctxt "#30108"
163 msgid "Any Channel"
164 msgstr "Cualquier canal"
165
166 msgctxt "#30110"
167 msgid "Airtime:"
168 msgstr "tiempo al aire:"
169
170 msgctxt "#30111"
171 msgid "Anytime"
172 msgstr "Cualquier hora"
173
174 msgctxt "#30120"
175 msgid "Delete Timer"
176 msgstr "Borrar temporizador"
177
178 msgctxt "#30121"
179 msgid "Delete this episode timer only"
180 msgstr "Eliminar sólo este temporizador de episodios"
181
74182 msgctxt "#30122"
75183 msgid "Delete the entire series"
76184 msgstr "Eliminar serie completa"
77185
186 msgctxt "#30130"
187 msgid "Created by Repeating Timer"
188 msgstr "Creado por el temporizador de repetición"
189
190 msgctxt "#30131"
191 msgid "One time (manual)"
192 msgstr "Una vez (manual)"
193
194 msgctxt "#30132"
195 msgid "One time (guide)"
196 msgstr "Una vez (guía)"
197
198 msgctxt "#30133"
199 msgid "One time (wishlist)"
200 msgstr "Una vez (lista de deseos)"
201
202 msgctxt "#30134"
203 msgid "Repeating (manual)"
204 msgstr "Repetición (manual)"
205
206 msgctxt "#30135"
207 msgid "Repeating (guide)"
208 msgstr "Repitiendo (guía)"
209
210 msgctxt "#30136"
211 msgid "Repeating (wishlist)"
212 msgstr "Repetición (lista de deseos)"
213
78214 msgctxt "#30140"
79215 msgid "Normal"
80216 msgstr "Normal"
86222 msgctxt "#30142"
87223 msgid "Low"
88224 msgstr "Bajo"
225
226 msgctxt "#30150"
227 msgid "New Episodes Only"
228 msgstr "Sólo nuevos episodios"
229
230 msgctxt "#30151"
231 msgid "New and Rerun Episodes"
232 msgstr "Episodios nuevos y de repetición"
233
234 msgctxt "#30152"
235 msgid "Live Only"
236 msgstr "Solo en vivo"
237
238 msgctxt "#30160"
239 msgid "Not Set"
240 msgstr "No establecido"
241
242 msgctxt "#30161"
243 msgid "Keep Latest Recordings"
244 msgstr "Mantener últimas grabaciones"
245
246 msgctxt "#30162"
247 msgid "Keep Until I Watch"
248 msgstr "Guarda hasta que yo vea"
249
250 msgctxt "#30163"
251 msgid "Keep Until Space Needed"
252 msgstr "Manténgase hasta que se necesite espacio"
253
254 msgctxt "#30164"
255 msgid "Keep Until I Delete"
256 msgstr "Mantener hasta borrar"
257
258 msgctxt "#30165"
259 msgid "Keep For 1 Week"
260 msgstr "Mantenga por 1 semana"
261
262 msgctxt "#30170"
263 msgid "Keep As Many As Possible"
264 msgstr "Guarda tanto como sea posible"
265
266 msgctxt "#30171"
267 msgid "Keep 1 Recording"
268 msgstr "Mantener 1 Grabación"
269
270 msgctxt "#30172"
271 msgid "Keep 2 Recordings"
272 msgstr "Mantener 2 Grabaciones"
273
274 msgctxt "#30173"
275 msgid "Keep 3 Recordings"
276 msgstr "Mantener 3 Grabaciones"
277
278 msgctxt "#30174"
279 msgid "Keep 4 Recordings"
280 msgstr "Mantener 4 Grabaciones"
281
282 msgctxt "#30175"
283 msgid "Keep 5 Recordings"
284 msgstr "Mantener 5 Grabaciones"
285
286 msgctxt "#30176"
287 msgid "Keep 6 Recordings"
288 msgstr "Mantener 6 Grabaciones"
289
290 msgctxt "#30177"
291 msgid "Keep 7 Recordings"
292 msgstr "Mantener 7 Grabaciones"
293
294 msgctxt "#30178"
295 msgid "Keep 10 Recordings"
296 msgstr "Mantener 10 Grabaciones"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1414 "Content-Transfer-Encoding: 8bit\n"
1515 "Language: eu_ES\n"
1616 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
18 msgctxt "#30001"
19 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
20 msgstr "Mantendu 127.0.0.1 helbidea zerbitzaria zerbitzari berean baldin badago"
21
22 msgctxt "#30002"
23 msgid "Port Number"
24 msgstr "Atakaren zenbakia"
1725
1826 msgctxt "#30107"
1927 msgid "Channel:"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
2121
2222 msgctxt "#30001"
2323 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Pidä osoitteena 127.0.0.1, mikäli palvelinta ajetaan samassa järjestelmässä"
24 msgstr "Pidä osoitteena 127.0.0.1, jos palvelinta ajetaan samassa järjestelmässä"
2525
2626 msgctxt "#30002"
2727 msgid "Port Number"
2929
3030 msgctxt "#30003"
3131 msgid "Stream timeout, unknown problem"
32 msgstr "Virtautus aikakatkaistiin, tunnistamaton ongelma"
32 msgstr "Suoratoiston aikakatkaisu, tuntematon ongelma"
3333
3434 msgctxt "#30004"
3535 msgid "No video data found on this channel"
3737
3838 msgctxt "#30005"
3939 msgid "Tuner is needed for recording"
40 msgstr "Nauhoittamiseen tarvitaan viritin"
40 msgstr "Tallentamiseen tarvitaan viritin"
4141
4242 msgctxt "#30006"
4343 msgid "Recording delete failed, file in use or write protected"
44 msgstr "Nauhoituksen poisto epäonnistui, tiedosto on käytössä tai kirjoitussuojattu"
44 msgstr "Tallennuksen poisto epäonnistui, tiedosto on käytössä tai kirjoitussuojattu"
4545
4646 msgctxt "#30007"
4747 msgid "Recording delete failed, recorded file doesn't exist"
48 msgstr "Nauhoituksen poisto epäonnistui, tallennetiedostoa ei ole olemassa"
48 msgstr "Tallennuksen poisto epäonnistui, tiedostoa ei ole olemassa"
4949
5050 msgctxt "#30008"
5151 msgid "Recording file not found"
52 msgstr "Tallennetiedostoa ei löydy"
52 msgstr "Tallennustiedostoa ei löytynyt"
5353
5454 msgctxt "#30009"
5555 msgid "Alternate channel chosen: "
7373
7474 msgctxt "#30014"
7575 msgid "Enable SignalStatus calls"
76 msgstr "Ota käyttöön SignalStatus-soitot"
76 msgstr "Ota käyttöön SignalStatus-kutsut"
7777
7878 msgctxt "#30015"
7979 msgid "Refresh SignalStatus Interval (sec)"
80 msgstr "Päivitä SignalStatus-välimatka (sek)"
80 msgstr "SignalStatuksen päivitysväli (sek)"
8181
8282 msgctxt "#30016"
8383 msgid "Store Resume/Watched status on server"
84 msgstr "Säilytä Jatka/katsottu -tila palvelimella"
84 msgstr "Tallenna Jatka/katsottu -tila palvelimelle"
8585
8686 msgctxt "#30017"
8787 msgid "Recorded TV folder not found"
9393
9494 msgctxt "#30019"
9595 msgid "ServerWMC version update is available (%s)"
96 msgstr "ServerWMC versiopäivitys saatavilla (%s)"
96 msgstr "ServerWMC:n versiopäivitys on saatavilla (%s)"
9797
9898 msgctxt "#30020"
9999 msgid "All tuners for this channel are busy"
117117
118118 msgctxt "#30025"
119119 msgid "Use WakeOnLAN to wake up server"
120 msgstr "Käytä WakeOnLania herättääksesi palvelimen"
120 msgstr "Herätä palvelin WakeOnLAN-komennolla"
121121
122122 msgctxt "#30026"
123123 msgid "Sending WakeOnLAN to server..."
137137
138138 msgctxt "#30102"
139139 msgid "Record the series"
140 msgstr "Tallenna sarjoja"
140 msgstr "Tallenna sarja"
141141
142142 msgctxt "#30103"
143143 msgid "Show type:"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1717
1818 msgctxt "#30000"
1919 msgid "Server Hostname or IP"
20 msgstr "Nom d'hôte ou IP du serveur"
20 msgstr "Nom d’hôte ou IP du serveur"
2121
2222 msgctxt "#30001"
2323 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Si le serveur tourne sur ce système, gardez l'adresse IP 127.0.0.1"
24 msgstr "Si le serveur tourne sur ce système, gardez l’adresse IP 127.0.0.1"
2525
2626 msgctxt "#30002"
2727 msgid "Port Number"
3333
3434 msgctxt "#30004"
3535 msgid "No video data found on this channel"
36 msgstr "Aucune donnée vidéo trouvée sur cette chaîne"
36 msgstr "Aucunes données vidéo n’ont été trouvées sur cette chaîne"
3737
3838 msgctxt "#30005"
3939 msgid "Tuner is needed for recording"
4141
4242 msgctxt "#30006"
4343 msgid "Recording delete failed, file in use or write protected"
44 msgstr "Échec de suppression de l'enregistrement. Le fichier est utilisé ou protégé en écriture"
44 msgstr "Échec de suppression de l’enregistrement. Le fichier est utilisé ou protégé en écriture"
4545
4646 msgctxt "#30007"
4747 msgid "Recording delete failed, recorded file doesn't exist"
48 msgstr "Échec de suppression de l'enregistrement. Le fichier enregistré n'existe pas"
48 msgstr "Échec de suppression de l’enregistrement. Le fichier enregistré n’existe pas"
4949
5050 msgctxt "#30008"
5151 msgid "Recording file not found"
5353
5454 msgctxt "#30009"
5555 msgid "Alternate channel chosen: "
56 msgstr "Chaîne alternative choisie :"
56 msgstr "Chaîne alternative choisie :"
5757
5858 msgctxt "#30010"
5959 msgid "Alternate time chosen: "
6161
6262 msgctxt "#30011"
6363 msgid "Can't start, tuner is no longer available"
64 msgstr "Démarrage impossible, le syntoniseur n'est plus disponible"
64 msgstr "Démarrage impossible, le syntoniseur n’est plus disponible"
6565
6666 msgctxt "#30012"
6767 msgid "Channel content is protected"
7373
7474 msgctxt "#30014"
7575 msgid "Enable SignalStatus calls"
76 msgstr "Activer les appels d'état du signal"
76 msgstr "Activer les appels d’état du signal"
7777
7878 msgctxt "#30015"
7979 msgid "Refresh SignalStatus Interval (sec)"
80 msgstr "Rafraîchir les intervalles d'état du signal (sec)"
80 msgstr "Rafraîchir les intervalles d’état du signal (sec)"
8181
8282 msgctxt "#30016"
8383 msgid "Store Resume/Watched status on server"
84 msgstr "Stocker l'état de reprise/regardé sur le serveur"
84 msgstr "Stocker l’état de reprise/de visionnement sur le serveur"
8585
8686 msgctxt "#30017"
8787 msgid "Recorded TV folder not found"
101101
102102 msgctxt "#30021"
103103 msgid "LiveTV timed-out"
104 msgstr "La télé en direct s'est interrompue"
104 msgstr "La télé en direct s’est interrompue"
105105
106106 msgctxt "#30022"
107107 msgid "LiveTV error, exited early"
109109
110110 msgctxt "#30023"
111111 msgid "Recording stream timed-out"
112 msgstr "Le flux d'enregistrement s'est interrompu"
112 msgstr "Le flux d’enregistrement s’est interrompu"
113113
114114 msgctxt "#30024"
115115 msgid "Recording stream exited early"
116 msgstr "Arrêt prématuré du flux d'enregistrement"
116 msgstr "Arrêt prématuré du flux d’enregistrement"
117117
118118 msgctxt "#30025"
119119 msgid "Use WakeOnLAN to wake up server"
121121
122122 msgctxt "#30026"
123123 msgid "Sending WakeOnLAN to server..."
124 msgstr "Envoi du réveil par le réseau au serveur..."
124 msgstr "Envoi du réveil par le réseau au serveur…"
125125
126126 msgctxt "#30027"
127127 msgid "Time drift between client and backend of %s minutes"
129129
130130 msgctxt "#30100"
131131 msgid "Recording Preference"
132 msgstr "Préférences d'enregistrement"
132 msgstr "Préférences d’enregistrement"
133133
134134 msgctxt "#30101"
135135 msgid "Record this episode only"
136 msgstr "N'enregistrer que cet épisode"
136 msgstr "N’enregistrer que cet épisode"
137137
138138 msgctxt "#30102"
139139 msgid "Record the series"
141141
142142 msgctxt "#30103"
143143 msgid "Show type:"
144 msgstr "Type d'émissions :"
144 msgstr "Type d’émissions :"
145145
146146 msgctxt "#30104"
147147 msgid "New and rerun"
161161
162162 msgctxt "#30108"
163163 msgid "Any Channel"
164 msgstr "N'importe quelle chaîne"
164 msgstr "N’importe quelle chaîne"
165165
166166 msgctxt "#30110"
167167 msgid "Airtime:"
169169
170170 msgctxt "#30111"
171171 msgid "Anytime"
172 msgstr "N'importe quand"
172 msgstr "N’importe quand"
173173
174174 msgctxt "#30120"
175175 msgid "Delete Timer"
245245
246246 msgctxt "#30162"
247247 msgid "Keep Until I Watch"
248 msgstr "Garder jusqu'à ce que je le regarde"
248 msgstr "Garder jusqu’à ce que je le regarde"
249249
250250 msgctxt "#30163"
251251 msgid "Keep Until Space Needed"
252 msgstr "Garder jusqu'à ce que l'espace soit requis"
252 msgstr "Garder jusqu’à ce que l’espace soit requis"
253253
254254 msgctxt "#30164"
255255 msgid "Keep Until I Delete"
256 msgstr "Garder jusqu'à ce que je le supprime"
256 msgstr "Garder jusqu’à ce que je le supprime"
257257
258258 msgctxt "#30165"
259259 msgid "Keep For 1 Week"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
183183 msgid "Delete the entire series"
184184 msgstr "Hapus semua seri"
185185
186 msgctxt "#30130"
187 msgid "Created by Repeating Timer"
188 msgstr "Dibuat dengan cara Mengulang Penghitung Waktu"
189
186190 msgctxt "#30140"
187191 msgid "Normal"
188192 msgstr "Normal"
194198 msgctxt "#30142"
195199 msgid "Low"
196200 msgstr "Rendah"
201
202 msgctxt "#30150"
203 msgid "New Episodes Only"
204 msgstr "Hanya Episode Baru"
205
206 msgctxt "#30151"
207 msgid "New and Rerun Episodes"
208 msgstr "Episode Baru dan yang Sedang Berjalan"
209
210 msgctxt "#30160"
211 msgid "Not Set"
212 msgstr "Belum Diatur"
213
214 msgctxt "#30161"
215 msgid "Keep Latest Recordings"
216 msgstr "Pertahankan Perekaman Terakhir"
217
218 msgctxt "#30162"
219 msgid "Keep Until I Watch"
220 msgstr "Pertahankan Sampai Saya Menonton"
221
222 msgctxt "#30163"
223 msgid "Keep Until Space Needed"
224 msgstr "Pertahankan Sampai Ruang Dibutuhkan"
225
226 msgctxt "#30164"
227 msgid "Keep Until I Delete"
228 msgstr "Pertahankan Sampai Saya Hapus"
229
230 msgctxt "#30165"
231 msgid "Keep For 1 Week"
232 msgstr "Pertahankan Selama 1 Minggu"
233
234 msgctxt "#30170"
235 msgid "Keep As Many As Possible"
236 msgstr "Pertahankan Selama Mungkin"
237
238 msgctxt "#30171"
239 msgid "Keep 1 Recording"
240 msgstr "Pertahankan 1 Rekaman"
241
242 msgctxt "#30172"
243 msgid "Keep 2 Recordings"
244 msgstr "Pertahankan 2 Rekaman"
245
246 msgctxt "#30173"
247 msgid "Keep 3 Recordings"
248 msgstr "Pertahankan 3 Rekaman"
249
250 msgctxt "#30174"
251 msgid "Keep 4 Recordings"
252 msgstr "Pertahankan 4 Rekaman"
253
254 msgctxt "#30175"
255 msgid "Keep 5 Recordings"
256 msgstr "Pertahankan 5 Rekaman"
257
258 msgctxt "#30176"
259 msgid "Keep 6 Recordings"
260 msgstr "Pertahankan 6 Rekaman"
261
262 msgctxt "#30177"
263 msgid "Keep 7 Recordings"
264 msgstr "Pertahankan 7 Rekaman"
265
266 msgctxt "#30178"
267 msgid "Keep 10 Recordings"
268 msgstr "Pertahankan 10 Rekaman"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1717
1818 msgctxt "#30000"
1919 msgid "Server Hostname or IP"
20 msgstr "Nafn miðlara eða IP tala"
20 msgstr "Nafn miðlara eða IP-tala"
2121
2222 msgctxt "#30001"
2323 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Hafðu IP töluna 127.0.0.1, ef miðlari er á keyra á sömu tölvu"
24 msgstr "Hafðu IP-töluna 127.0.0.1, ef miðlari er á keyra á sömu tölvu"
2525
2626 msgctxt "#30002"
2727 msgid "Port Number"
28 msgstr "Hlið númer"
28 msgstr "Gátt númer"
2929
3030 msgctxt "#30003"
3131 msgid "Stream timeout, unknown problem"
32 msgstr "Tengitími straums rann út, óþekkt vandamál"
32 msgstr "Streymi rann út á tíma, óþekkt vandamál"
3333
3434 msgctxt "#30004"
3535 msgid "No video data found on this channel"
101101
102102 msgctxt "#30021"
103103 msgid "LiveTV timed-out"
104 msgstr "Tengitími fyrir LiveTV rann út"
104 msgstr "Tengitími fyrir beina útsendingu rann út"
105105
106106 msgctxt "#30022"
107107 msgid "LiveTV error, exited early"
108 msgstr "LiveTV villa, hætti snemma"
108 msgstr "Villa í beinni útsendingu, hætti snemma"
109109
110110 msgctxt "#30023"
111111 msgid "Recording stream timed-out"
112 msgstr "Tengitími upptökustraums rann út"
112 msgstr "Upptökustreymi rann út á tíma"
113113
114114 msgctxt "#30024"
115115 msgid "Recording stream exited early"
116 msgstr "Upptökustraumur hætti snemma"
116 msgstr "Upptökustreymi hætti of snemma"
117117
118118 msgctxt "#30025"
119119 msgid "Use WakeOnLAN to wake up server"
161161
162162 msgctxt "#30108"
163163 msgid "Any Channel"
164 msgstr "Allar Rásir"
164 msgstr "Hvaða rás sem er"
165165
166166 msgctxt "#30110"
167167 msgid "Airtime:"
183183 msgid "Delete the entire series"
184184 msgstr "Eyða fyrir alla þáttaröðina"
185185
186 msgctxt "#30130"
187 msgid "Created by Repeating Timer"
188 msgstr "Búið til með endurtekinni tímatöku"
189
190 msgctxt "#30131"
191 msgid "One time (manual)"
192 msgstr "Eitt skipti (handvirkt)"
193
194 msgctxt "#30132"
195 msgid "One time (guide)"
196 msgstr "Eitt skipti (dagskrárvísir)"
197
198 msgctxt "#30133"
199 msgid "One time (wishlist)"
200 msgstr "Eitt skipti (óskalisti)"
201
202 msgctxt "#30134"
203 msgid "Repeating (manual)"
204 msgstr "Endurtekið (handvirkt)"
205
206 msgctxt "#30135"
207 msgid "Repeating (guide)"
208 msgstr "Endurtekið (dagskrárvísir)"
209
210 msgctxt "#30136"
211 msgid "Repeating (wishlist)"
212 msgstr "Endurtekið (óskalisti)"
213
186214 msgctxt "#30140"
187215 msgid "Normal"
188216 msgstr "Venjulegt"
194222 msgctxt "#30142"
195223 msgid "Low"
196224 msgstr "Lægst"
225
226 msgctxt "#30150"
227 msgid "New Episodes Only"
228 msgstr "Einungis nýjir þættir"
229
230 msgctxt "#30151"
231 msgid "New and Rerun Episodes"
232 msgstr "Nýjir og endursýndir þættir"
233
234 msgctxt "#30152"
235 msgid "Live Only"
236 msgstr "Aðeins beinar útsendingar"
237
238 msgctxt "#30160"
239 msgid "Not Set"
240 msgstr "Ekki stillt"
241
242 msgctxt "#30161"
243 msgid "Keep Latest Recordings"
244 msgstr "Halda síðustu upptökum"
245
246 msgctxt "#30162"
247 msgid "Keep Until I Watch"
248 msgstr "Halda þangað til búið er að horfa á"
249
250 msgctxt "#30163"
251 msgid "Keep Until Space Needed"
252 msgstr "Halda þangað til vantar pláss"
253
254 msgctxt "#30164"
255 msgid "Keep Until I Delete"
256 msgstr "Halda þangað til ég eyði"
257
258 msgctxt "#30165"
259 msgid "Keep For 1 Week"
260 msgstr "Halda í 1 viku"
261
262 msgctxt "#30170"
263 msgid "Keep As Many As Possible"
264 msgstr "Halda eins mörgum og mögulegt er"
265
266 msgctxt "#30171"
267 msgid "Keep 1 Recording"
268 msgstr "Halda 1 upptöku"
269
270 msgctxt "#30172"
271 msgid "Keep 2 Recordings"
272 msgstr "Halda 2 upptökum"
273
274 msgctxt "#30173"
275 msgid "Keep 3 Recordings"
276 msgstr "Halda 3 upptökum"
277
278 msgctxt "#30174"
279 msgid "Keep 4 Recordings"
280 msgstr "Halda 4 upptökum"
281
282 msgctxt "#30175"
283 msgid "Keep 5 Recordings"
284 msgstr "Halda 5 upptökum"
285
286 msgctxt "#30176"
287 msgid "Keep 6 Recordings"
288 msgstr "Halda 6 upptökum"
289
290 msgctxt "#30177"
291 msgid "Keep 7 Recordings"
292 msgstr "Halda 7 upptökum"
293
294 msgctxt "#30178"
295 msgid "Keep 10 Recordings"
296 msgstr "Halda 10 upptökum"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
125125
126126 msgctxt "#30027"
127127 msgid "Time drift between client and backend of %s minutes"
128 msgstr "Laika nobīde starp klientu un aizmugursistēmu %s minūtes"
128 msgstr "Laika nobīde starp klientu un galasistēmu %s minūtes"
129129
130130 msgctxt "#30100"
131131 msgid "Recording Preference"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1717
1818 msgctxt "#30000"
1919 msgid "Server Hostname or IP"
20 msgstr "Servernavn eller IP"
20 msgstr "Tjenernavn eller IP"
2121
2222 msgctxt "#30001"
2323 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Behold IP adressen 127.0.0.1 om serveren kjører på samme system."
24 msgstr "Behold IP-adressen 127.0.0.1 om tjeneren kjører på samme system."
2525
2626 msgctxt "#30002"
2727 msgid "Port Number"
8181
8282 msgctxt "#30016"
8383 msgid "Store Resume/Watched status on server"
84 msgstr "Lagre Gjenoppta/Overvåket status på server"
84 msgstr "Lagre Gjenoppta/overvåket -status på tjener"
8585
8686 msgctxt "#30017"
8787 msgid "Recorded TV folder not found"
9393
9494 msgctxt "#30019"
9595 msgid "ServerWMC version update is available (%s)"
96 msgstr "ServerWMC versjon oppdatering er tilgjengelig (%s)"
96 msgstr "ServerWMC-versjonsoppdatering tilgjengelig (%s)"
9797
9898 msgctxt "#30020"
9999 msgid "All tuners for this channel are busy"
101101
102102 msgctxt "#30021"
103103 msgid "LiveTV timed-out"
104 msgstr "Tidsavbrudd for LiveTV"
104 msgstr "Tidsavbrudd for direkte-TV"
105105
106106 msgctxt "#30022"
107107 msgid "LiveTV error, exited early"
108 msgstr "LiveTV feil - avsluttet tidlig"
108 msgstr "Feil med direkte-TV - avsluttet tidlig"
109109
110110 msgctxt "#30023"
111111 msgid "Recording stream timed-out"
117117
118118 msgctxt "#30025"
119119 msgid "Use WakeOnLAN to wake up server"
120 msgstr "Bruk StartMedLAN for å starte opp serveren"
120 msgstr "Bruk StartMedLAN for å starte opp tjeneren"
121121
122122 msgctxt "#30026"
123123 msgid "Sending WakeOnLAN to server..."
124 msgstr "Sender StartPåLAN til server..."
124 msgstr "Sender StartPåLAN til tjener…"
125125
126126 msgctxt "#30027"
127127 msgid "Time drift between client and backend of %s minutes"
185185
186186 msgctxt "#30130"
187187 msgid "Created by Repeating Timer"
188 msgstr "Opprettet av Gjentangende Ur"
188 msgstr "Opprettet av gjentangende ur"
189189
190190 msgctxt "#30131"
191191 msgid "One time (manual)"
192 msgstr "En gang (manuell)"
192 msgstr "Én gang (manuell)"
193193
194194 msgctxt "#30132"
195195 msgid "One time (guide)"
196 msgstr "En gang (guide)"
196 msgstr "Én gang (guide)"
197197
198198 msgctxt "#30133"
199199 msgid "One time (wishlist)"
200 msgstr "En gang (ønskeliste)"
200 msgstr "Én gang (ønskeliste)"
201201
202202 msgctxt "#30134"
203203 msgid "Repeating (manual)"
229229
230230 msgctxt "#30151"
231231 msgid "New and Rerun Episodes"
232 msgstr "Nye og reprise episoder"
232 msgstr "Nye episoder og repriser"
233233
234234 msgctxt "#30152"
235235 msgid "Live Only"
257257
258258 msgctxt "#30165"
259259 msgid "Keep For 1 Week"
260 msgstr "Behold i 1 uke"
260 msgstr "Behold i én uke"
261261
262262 msgctxt "#30170"
263263 msgid "Keep As Many As Possible"
265265
266266 msgctxt "#30171"
267267 msgid "Keep 1 Recording"
268 msgstr "Behold 1 opptak"
268 msgstr "Behold ett opptak"
269269
270270 msgctxt "#30172"
271271 msgid "Keep 2 Recordings"
272 msgstr "Behold 2 opptak"
272 msgstr "Behold to opptak"
273273
274274 msgctxt "#30173"
275275 msgid "Keep 3 Recordings"
276 msgstr "Behold 3 opptak"
276 msgstr "Behold tre opptak"
277277
278278 msgctxt "#30174"
279279 msgid "Keep 4 Recordings"
280 msgstr "Behold 4 opptak"
280 msgstr "Behold fire opptak"
281281
282282 msgctxt "#30175"
283283 msgid "Keep 5 Recordings"
284 msgstr "Behold 5 opptak"
284 msgstr "Behold fem opptak"
285285
286286 msgctxt "#30176"
287287 msgid "Keep 6 Recordings"
288 msgstr "Behold 6 opptak"
288 msgstr "Behold seks opptak"
289289
290290 msgctxt "#30177"
291291 msgid "Keep 7 Recordings"
292 msgstr "Behold 7 opptak"
292 msgstr "Behold syv opptak"
293293
294294 msgctxt "#30178"
295295 msgid "Keep 10 Recordings"
296 msgstr "Behold 10 opptak"
296 msgstr "Behold ti opptak"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
6565
6666 msgctxt "#30012"
6767 msgid "Channel content is protected"
68 msgstr "Kanaal inhoud is beschermd"
68 msgstr "Kanaalinhoud is beschermd"
6969
7070 msgctxt "#30013"
7171 msgid "End time increased by "
7373
7474 msgctxt "#30014"
7575 msgid "Enable SignalStatus calls"
76 msgstr "Schakel in Signaastatus oproepen"
76 msgstr "Signaalstatus-oproepen inschakelen"
7777
7878 msgctxt "#30015"
7979 msgid "Refresh SignalStatus Interval (sec)"
8585
8686 msgctxt "#30017"
8787 msgid "Recorded TV folder not found"
88 msgstr "Opgenomen TV folder niet gevonden"
88 msgstr "TV opname-folder niet gevonden"
8989
9090 msgctxt "#30018"
9191 msgid "Recorded TV folder cannot be opened"
9797
9898 msgctxt "#30020"
9999 msgid "All tuners for this channel are busy"
100 msgstr "Alle tuners voor dit kanaal zij in gebruik"
100 msgstr "Alle tuners voor dit kanaal zijn in gebruik"
101101
102102 msgctxt "#30021"
103103 msgid "LiveTV timed-out"
105105
106106 msgctxt "#30022"
107107 msgid "LiveTV error, exited early"
108 msgstr "LiveTV error, Vroegtijdig beïnidigd "
108 msgstr "LiveTV error, Vroegtijdig beëindigd "
109109
110110 msgctxt "#30023"
111111 msgid "Recording stream timed-out"
125125
126126 msgctxt "#30027"
127127 msgid "Time drift between client and backend of %s minutes"
128 msgstr "Tijdsdrift tussen opdrachtgever en backend van% s minuten"
128 msgstr "Tijdsverschil tussen opdrachtgever en backend van% s minuten"
129129
130130 msgctxt "#30100"
131131 msgid "Recording Preference"
132 msgstr "Opname voorkeur"
132 msgstr "Opnamevoorkeur"
133133
134134 msgctxt "#30101"
135135 msgid "Record this episode only"
149149
150150 msgctxt "#30105"
151151 msgid "New only"
152 msgstr "Alleen nieuwe"
152 msgstr "Alleen nieuw"
153153
154154 msgctxt "#30106"
155155 msgid "Live only"
181181
182182 msgctxt "#30122"
183183 msgid "Delete the entire series"
184 msgstr "verwijder de gehele serie"
184 msgstr "Verwijder de gehele serie"
185185
186186 msgctxt "#30130"
187187 msgid "Created by Repeating Timer"
229229
230230 msgctxt "#30151"
231231 msgid "New and Rerun Episodes"
232 msgstr "Nieuw en herhaal afleveringen"
232 msgstr "Nieuw en herhaalafleveringen"
233233
234234 msgctxt "#30152"
235235 msgid "Live Only"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
2929
3030 msgctxt "#30003"
3131 msgid "Stream timeout, unknown problem"
32 msgstr "Przekroczono limit czasu oczekiwania na strumień, nieznany błąd"
32 msgstr "Przekroczono limit czasu oczekiwania na transmisję, nieznany błąd"
3333
3434 msgctxt "#30004"
3535 msgid "No video data found on this channel"
36 msgstr "Brak strumienia wideo dla tego kanału"
36 msgstr "Brak transmisji wideo dla tego kanału"
3737
3838 msgctxt "#30005"
3939 msgid "Tuner is needed for recording"
105105
106106 msgctxt "#30022"
107107 msgid "LiveTV error, exited early"
108 msgstr "Błąd strumieniowania, przedwczesne zamknięcie strumienia"
108 msgstr "Błąd transmisji, przedwczesne zamknięcie"
109109
110110 msgctxt "#30023"
111111 msgid "Recording stream timed-out"
113113
114114 msgctxt "#30024"
115115 msgid "Recording stream exited early"
116 msgstr "Błąd nagrywania, przedwczesne zamknięcie strumienia"
116 msgstr "Błąd nagrywania, przedwczesne zamknięcie transmisji"
117117
118118 msgctxt "#30025"
119119 msgid "Use WakeOnLAN to wake up server"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1717
1818 msgctxt "#30000"
1919 msgid "Server Hostname or IP"
20 msgstr "Nume gazdă sau IP server"
20 msgstr "Nume gazdă sau adresă IP servitor"
2121
2222 msgctxt "#30001"
2323 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Mențineți adresa IP 127.0.0.1, dacă serverul rulează pe același sistem"
24 msgstr "Mențineți adresa IP 127.0.0.1, dacă servitorul rulează pe același sistem"
2525
2626 msgctxt "#30002"
2727 msgid "Port Number"
8181
8282 msgctxt "#30016"
8383 msgid "Store Resume/Watched status on server"
84 msgstr "Storchează stare Reluare/Văzut pe server"
84 msgstr "Stochează stare Reluate/Văzute pe servitor"
8585
8686 msgctxt "#30017"
8787 msgid "Recorded TV folder not found"
117117
118118 msgctxt "#30025"
119119 msgid "Use WakeOnLAN to wake up server"
120 msgstr "Folosește WakeOnLAN pentru a deștepta server-ul"
120 msgstr "Folosește WakeOnLAN pentru a deștepta servitorul"
121121
122122 msgctxt "#30026"
123123 msgid "Sending WakeOnLAN to server..."
124 msgstr "Se trimite pachetul WakeOnLAN la server..."
124 msgstr "Se trimite pachetul de deșteptare (WakeOnLAN) la servitor..."
125125
126126 msgctxt "#30027"
127127 msgid "Time drift between client and backend of %s minutes"
237237
238238 msgctxt "#30160"
239239 msgid "Not Set"
240 msgstr "Nedefinit"
240 msgstr "Nestabilit"
241241
242242 msgctxt "#30161"
243243 msgid "Keep Latest Recordings"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
2121
2222 msgctxt "#30001"
2323 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Ange IP-adress 127.0.0.1 om servern körs på detta system"
24 msgstr "Behåll IP-adress 127.0.0.1 om servern körs på detta system"
2525
2626 msgctxt "#30002"
2727 msgid "Port Number"
101101
102102 msgctxt "#30021"
103103 msgid "LiveTV timed-out"
104 msgstr "Väntetiden för LiveTV överskreds"
104 msgstr "Väntetiden för Live-TV överskreds"
105105
106106 msgctxt "#30022"
107107 msgid "LiveTV error, exited early"
108 msgstr "LiveTV fel, avslutades tidigt"
108 msgstr "Live-TV fel, avslutades tidigt"
109109
110110 msgctxt "#30023"
111111 msgid "Recording stream timed-out"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1515 "Language: szl\n"
1616 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
1717
18 msgctxt "#30000"
19 msgid "Server Hostname or IP"
20 msgstr "Miano lebo adresa serwera"
21
22 msgctxt "#30001"
23 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "Spamiyntej adresa IP 127.0.0.1, jeźli serwer je sztartniynty na tym samym systymie"
25
26 msgctxt "#30002"
27 msgid "Port Number"
28 msgstr "Port"
29
30 msgctxt "#30003"
31 msgid "Stream timeout, unknown problem"
32 msgstr "Przestōmpiōno było limit czŏsu czekaniŏ na szprica, niyznōmy feler"
33
34 msgctxt "#30004"
35 msgid "No video data found on this channel"
36 msgstr "Niy ma szpricy wideo dlŏ tego kanału"
37
38 msgctxt "#30005"
39 msgid "Tuner is needed for recording"
40 msgstr "Niy ma dostympnygo tunera dlŏ funkcyje nagrowaniŏ"
41
42 msgctxt "#30006"
43 msgid "Recording delete failed, file in use or write protected"
44 msgstr "Niypodarzōne uchrōniynie nagraniŏ, zbiōr je w użyciu lebo bezpieczōny przed spamiyntowaniym"
45
46 msgctxt "#30007"
47 msgid "Recording delete failed, recorded file doesn't exist"
48 msgstr "Niypodarzōne uchrōniynie nagraniŏ, zbioru nagraniŏ niy ma"
49
50 msgctxt "#30008"
51 msgid "Recording file not found"
52 msgstr "Zbiōr nagraniŏ niydostympny"
53
54 msgctxt "#30009"
55 msgid "Alternate channel chosen: "
56 msgstr "Ôbrany alternatywny kanał:"
57
58 msgctxt "#30010"
59 msgid "Alternate time chosen: "
60 msgstr "Ôbrany alternatywny czŏs:"
61
62 msgctxt "#30011"
63 msgid "Can't start, tuner is no longer available"
64 msgstr "Niypodarzōne sztartniyńcie, tuner je niydostympny"
65
66 msgctxt "#30012"
67 msgid "Channel content is protected"
68 msgstr "Zawartość kanału je bezpieczōnŏ"
69
70 msgctxt "#30013"
71 msgid "End time increased by "
72 msgstr "Czŏs kōńca szafniynty ô"
73
74 msgctxt "#30014"
75 msgid "Enable SignalStatus calls"
76 msgstr "Pokŏzuj jakość sygnołu"
77
78 msgctxt "#30015"
79 msgid "Refresh SignalStatus Interval (sec)"
80 msgstr "Frekwyncyjŏ ôdświyżaniŏ jakości sygnału (w sekundach)"
81
82 msgctxt "#30016"
83 msgid "Store Resume/Watched status on server"
84 msgstr "Spamiyntuj stany ôdtwŏrzaniŏ na serwerze"
85
86 msgctxt "#30017"
87 msgid "Recorded TV folder not found"
88 msgstr "Niy znŏdniynto było folderu nagrań telewizyjnych"
89
90 msgctxt "#30018"
91 msgid "Recorded TV folder cannot be opened"
92 msgstr " Niy idzie ôdewrzić folderu nagrań telewizyjnych"
93
94 msgctxt "#30019"
95 msgid "ServerWMC version update is available (%s)"
96 msgstr "Dostympnŏ je aktualizacyjŏ wersyje serwera (%s)"
97
98 msgctxt "#30020"
99 msgid "All tuners for this channel are busy"
100 msgstr "Wszyjske tunery dlŏ tego kanału sōm zajynte"
101
102 msgctxt "#30021"
103 msgid "LiveTV timed-out"
104 msgstr "Przestōmpiōno było limit czŏsu skuplowaniŏ"
105
106 msgctxt "#30022"
107 msgid "LiveTV error, exited early"
108 msgstr "Feler telewizyje, wyrychlane zawrzynie szpricy"
109
110 msgctxt "#30023"
111 msgid "Recording stream timed-out"
112 msgstr "Przestōmpiōno było limit czŏsu napoczyńciŏ nagraniŏ"
113
114 msgctxt "#30024"
115 msgid "Recording stream exited early"
116 msgstr "Feler nagrowaniŏ, wyrychlane zawrzynie szpricy"
117
118 msgctxt "#30025"
119 msgid "Use WakeOnLAN to wake up server"
120 msgstr "Używej zdŏlnygo cucyniŏ serwera"
121
122 msgctxt "#30026"
123 msgid "Sending WakeOnLAN to server..."
124 msgstr "Posyłanie nakŏzaniŏ cucyniŏ do serwera..."
125
126 msgctxt "#30027"
127 msgid "Time drift between client and backend of %s minutes"
128 msgstr "Szafniyńcie czŏsu miyndzy klijyntym a serwerym ô %s minut"
129
130 msgctxt "#30100"
131 msgid "Recording Preference"
132 msgstr "Preferyncyje nagrowaniŏ"
133
134 msgctxt "#30101"
135 msgid "Record this episode only"
136 msgstr "Nagrej ino tyn part"
137
138 msgctxt "#30102"
139 msgid "Record the series"
140 msgstr "Nagrowej cołki serial"
141
142 msgctxt "#30103"
143 msgid "Show type:"
144 msgstr "Pokŏzuj zortã:"
145
146 msgctxt "#30104"
147 msgid "New and rerun"
148 msgstr "Nowe i zaś nadŏwane"
149
150 msgctxt "#30105"
151 msgid "New only"
152 msgstr "Ino nowe"
153
154 msgctxt "#30106"
155 msgid "Live only"
156 msgstr "Ino na żywo"
157
18158 msgctxt "#30107"
19159 msgid "Channel:"
20160 msgstr "Kanał:"
21161
162 msgctxt "#30108"
163 msgid "Any Channel"
164 msgstr "Leda jaki kanał"
165
166 msgctxt "#30110"
167 msgid "Airtime:"
168 msgstr "Czŏs ymisyje:"
169
170 msgctxt "#30111"
171 msgid "Anytime"
172 msgstr "Kej ino"
173
174 msgctxt "#30120"
175 msgid "Delete Timer"
176 msgstr "Uchrōń auftrag"
177
178 msgctxt "#30121"
179 msgid "Delete this episode timer only"
180 msgstr "Uchrōń ôbcyrklowane nagranie ino tego partu"
181
182 msgctxt "#30122"
183 msgid "Delete the entire series"
184 msgstr "Uchrōń cołki seriŏl"
185
186 msgctxt "#30130"
187 msgid "Created by Repeating Timer"
188 msgstr "Wytworzōne bez auftrag cykliczny"
189
190 msgctxt "#30131"
191 msgid "One time (manual)"
192 msgstr "Jednorazowo (manualnie)"
193
194 msgctxt "#30132"
195 msgid "One time (guide)"
196 msgstr "Jednorazowo (ôkludzŏcz)"
197
198 msgctxt "#30133"
199 msgid "One time (wishlist)"
200 msgstr "Jednorazowo (wykŏz)"
201
202 msgctxt "#30134"
203 msgid "Repeating (manual)"
204 msgstr "Cyklicznie (manualnie)"
205
206 msgctxt "#30135"
207 msgid "Repeating (guide)"
208 msgstr "Cyklicznie (ôkludzŏcz)"
209
210 msgctxt "#30136"
211 msgid "Repeating (wishlist)"
212 msgstr "Cyklicznie (wykŏz)"
213
22214 msgctxt "#30140"
23215 msgid "Normal"
24216 msgstr "Ôbyczajny"
30222 msgctxt "#30142"
31223 msgid "Low"
32224 msgstr "min."
225
226 msgctxt "#30150"
227 msgid "New Episodes Only"
228 msgstr "Ino nowe party"
229
230 msgctxt "#30151"
231 msgid "New and Rerun Episodes"
232 msgstr "Nowe i zaś ymitowane party"
233
234 msgctxt "#30152"
235 msgid "Live Only"
236 msgstr "Ino na żywo"
237
238 msgctxt "#30160"
239 msgid "Not Set"
240 msgstr "Niynasztalowane"
241
242 msgctxt "#30161"
243 msgid "Keep Latest Recordings"
244 msgstr "Spamiyntuj ôstatnie nagrania"
245
246 msgctxt "#30162"
247 msgid "Keep Until I Watch"
248 msgstr "Spamiyntuj do piyrszygo ôbejzdrzyniŏ"
249
250 msgctxt "#30163"
251 msgid "Keep Until Space Needed"
252 msgstr "Spamiyntuj aże braknie placu na dysku"
253
254 msgctxt "#30164"
255 msgid "Keep Until I Delete"
256 msgstr "Spamiyntuj do uchrōniyniŏ"
257
258 msgctxt "#30165"
259 msgid "Keep For 1 Week"
260 msgstr "Spamiyntuj bez 1 tydziyń"
261
262 msgctxt "#30170"
263 msgid "Keep As Many As Possible"
264 msgstr "Spamiyntuj wiela to ino możebne"
265
266 msgctxt "#30171"
267 msgid "Keep 1 Recording"
268 msgstr "Spamiyntuj 1 nagranie"
269
270 msgctxt "#30172"
271 msgid "Keep 2 Recordings"
272 msgstr "Spamiyntuj 2 nagrania"
273
274 msgctxt "#30173"
275 msgid "Keep 3 Recordings"
276 msgstr "Spamiyntuj 3 nagrania"
277
278 msgctxt "#30174"
279 msgid "Keep 4 Recordings"
280 msgstr "Spamiyntuj 4 nagrania"
281
282 msgctxt "#30175"
283 msgid "Keep 5 Recordings"
284 msgstr "Spamiyntuj 5 nagrań"
285
286 msgctxt "#30176"
287 msgid "Keep 6 Recordings"
288 msgstr "Spamiyntuj 6 nagrań"
289
290 msgctxt "#30177"
291 msgid "Keep 7 Recordings"
292 msgstr "Spamiyntuj 7 nagrań"
293
294 msgctxt "#30178"
295 msgid "Keep 10 Recordings"
296 msgstr "Spamiyntuj 10 nagrań"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
183183 msgid "Delete the entire series"
184184 msgstr "Tüm seriyi sil"
185185
186 msgctxt "#30130"
187 msgid "Created by Repeating Timer"
188 msgstr "Tekrarlanan Zamanlayıcı tarafından oluşturuldu"
189
190 msgctxt "#30131"
191 msgid "One time (manual)"
192 msgstr "Tek seferlik (elle)"
193
194 msgctxt "#30132"
195 msgid "One time (guide)"
196 msgstr "Tek seferiik (rehber)"
197
198 msgctxt "#30133"
199 msgid "One time (wishlist)"
200 msgstr "Tek seferlik (istek listesi)"
201
202 msgctxt "#30134"
203 msgid "Repeating (manual)"
204 msgstr "Tekrarlı (elle)"
205
206 msgctxt "#30135"
207 msgid "Repeating (guide)"
208 msgstr "Tekrarlı (rehber)"
209
210 msgctxt "#30136"
211 msgid "Repeating (wishlist)"
212 msgstr "Tekrarlı (istek listesi)"
213
186214 msgctxt "#30140"
187215 msgid "Normal"
188216 msgstr "Normal"
198226 msgctxt "#30150"
199227 msgid "New Episodes Only"
200228 msgstr "Sadece Yeni Bölümler"
229
230 msgctxt "#30151"
231 msgid "New and Rerun Episodes"
232 msgstr "Yeni ve tekrar bölümler"
233
234 msgctxt "#30152"
235 msgid "Live Only"
236 msgstr "Sadece canlı yayın"
237
238 msgctxt "#30160"
239 msgid "Not Set"
240 msgstr "Belirlenmemiş"
241
242 msgctxt "#30161"
243 msgid "Keep Latest Recordings"
244 msgstr "Son kayıtları sakla"
245
246 msgctxt "#30162"
247 msgid "Keep Until I Watch"
248 msgstr "İzleyene kadar sakla"
249
250 msgctxt "#30163"
251 msgid "Keep Until Space Needed"
252 msgstr "Boş alan lazım olana dek sakla"
253
254 msgctxt "#30164"
255 msgid "Keep Until I Delete"
256 msgstr "Silene kadar sakla"
257
258 msgctxt "#30165"
259 msgid "Keep For 1 Week"
260 msgstr "1 hafta sakla"
261
262 msgctxt "#30170"
263 msgid "Keep As Many As Possible"
264 msgstr "Mümkün olduğunca fazla sayıda sakla"
265
266 msgctxt "#30171"
267 msgid "Keep 1 Recording"
268 msgstr "1 kayıt sakla"
269
270 msgctxt "#30172"
271 msgid "Keep 2 Recordings"
272 msgstr "2 kayıt sakla"
273
274 msgctxt "#30173"
275 msgid "Keep 3 Recordings"
276 msgstr "3 kayıt sakla"
277
278 msgctxt "#30174"
279 msgid "Keep 4 Recordings"
280 msgstr "4 kayıt sakla"
281
282 msgctxt "#30175"
283 msgid "Keep 5 Recordings"
284 msgstr "5 kayıt sakla"
285
286 msgctxt "#30176"
287 msgid "Keep 6 Recordings"
288 msgstr "6 kayıt sakla"
289
290 msgctxt "#30177"
291 msgid "Keep 7 Recordings"
292 msgstr "7 kayıt sakla"
293
294 msgctxt "#30178"
295 msgid "Keep 10 Recordings"
296 msgstr "10 kayıt sakla"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
183183 msgid "Delete the entire series"
184184 msgstr "Видалити весь серіал"
185185
186 msgctxt "#30130"
187 msgid "Created by Repeating Timer"
188 msgstr "Створено зусиллями Repeating Timer"
189
186190 msgctxt "#30140"
187191 msgid "Normal"
188192 msgstr "Нормальне"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
44 msgid ""
55 msgstr ""
66 "Project-Id-Version: KODI Main\n"
7 "Report-Msgid-Bugs-To: http://trac.kodi.tv/\n"
7 "Report-Msgid-Bugs-To: https://github.com/xbmc/xbmc/issues/\n"
88 "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
99 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1010 "Last-Translator: Kodi Translation Team\n"
1515 "Language: zh_TW\n"
1616 "Plural-Forms: nplurals=1; plural=0;\n"
1717
18 msgctxt "#30000"
19 msgid "Server Hostname or IP"
20 msgstr "伺服器網址或IP"
21
22 msgctxt "#30001"
23 msgid "Keep IP address to 127.0.0.1, if server is running on this same system"
24 msgstr "如果伺服器在本機運作,請將IP設為127.0.0.1。"
25
26 msgctxt "#30002"
27 msgid "Port Number"
28 msgstr "連接埠號碼"
29
30 msgctxt "#30003"
31 msgid "Stream timeout, unknown problem"
32 msgstr "串流逾時,問題不明"
33
34 msgctxt "#30004"
35 msgid "No video data found on this channel"
36 msgstr "本頻道沒有影像資料"
37
38 msgctxt "#30005"
39 msgid "Tuner is needed for recording"
40 msgstr "錄影需要電視選台器"
41
42 msgctxt "#30006"
43 msgid "Recording delete failed, file in use or write protected"
44 msgstr "刪除錄影檔失敗,檔案使用中或已受保護"
45
46 msgctxt "#30007"
47 msgid "Recording delete failed, recorded file doesn't exist"
48 msgstr "刪除錄影檔失敗,檔案不存在"
49
50 msgctxt "#30008"
51 msgid "Recording file not found"
52 msgstr "找不到錄影檔"
53
54 msgctxt "#30009"
55 msgid "Alternate channel chosen: "
56 msgstr "替代頻道選擇:"
57
58 msgctxt "#30010"
59 msgid "Alternate time chosen: "
60 msgstr "替代時間選擇:"
61
62 msgctxt "#30011"
63 msgid "Can't start, tuner is no longer available"
64 msgstr "無法啟動,選台器不可用"
65
66 msgctxt "#30012"
67 msgid "Channel content is protected"
68 msgstr "頻道內容已受保護"
69
70 msgctxt "#30013"
71 msgid "End time increased by "
72 msgstr "結束時間延長"
73
74 msgctxt "#30014"
75 msgid "Enable SignalStatus calls"
76 msgstr "開啟SignalStatus的呼叫"
77
78 msgctxt "#30015"
79 msgid "Refresh SignalStatus Interval (sec)"
80 msgstr "更新SignalStatus的間隔 (秒)"
81
82 msgctxt "#30016"
83 msgid "Store Resume/Watched status on server"
84 msgstr "儲存伺服器中\"續播/已看完\"的狀態"
85
86 msgctxt "#30017"
87 msgid "Recorded TV folder not found"
88 msgstr "找不到已錄製的電視節目資料夾"
89
90 msgctxt "#30018"
91 msgid "Recorded TV folder cannot be opened"
92 msgstr "無法開啟已錄製電視節目資料夾"
93
94 msgctxt "#30019"
95 msgid "ServerWMC version update is available (%s)"
96 msgstr "有可用的ServerWMC更新版本(%s)"
97
98 msgctxt "#30020"
99 msgid "All tuners for this channel are busy"
100 msgstr "本頻道可用的選台器忙碌中"
101
102 msgctxt "#30021"
103 msgid "LiveTV timed-out"
104 msgstr "LiveTV逾時"
105
106 msgctxt "#30022"
107 msgid "LiveTV error, exited early"
108 msgstr "LiveTV錯誤,提前退出"
109
110 msgctxt "#30023"
111 msgid "Recording stream timed-out"
112 msgstr "串流錄影逾時"
113
114 msgctxt "#30024"
115 msgid "Recording stream exited early"
116 msgstr "串流錄影提早退出"
117
118 msgctxt "#30025"
119 msgid "Use WakeOnLAN to wake up server"
120 msgstr "使用WakeOnLAN來喚醒伺服器"
121
122 msgctxt "#30026"
123 msgid "Sending WakeOnLAN to server..."
124 msgstr "傳送WakeOnLAN指令到伺服器"
125
126 msgctxt "#30027"
127 msgid "Time drift between client and backend of %s minutes"
128 msgstr "用戶端與後端時間差%s分"
129
130 msgctxt "#30100"
131 msgid "Recording Preference"
132 msgstr "錄影設定"
133
18134 msgctxt "#30101"
19135 msgid "Record this episode only"
20 msgstr "只刪除這個插曲"
136 msgstr "僅刪除本集"
137
138 msgctxt "#30102"
139 msgid "Record the series"
140 msgstr "錄製系列影集"
141
142 msgctxt "#30103"
143 msgid "Show type:"
144 msgstr "影集類型:"
145
146 msgctxt "#30104"
147 msgid "New and rerun"
148 msgstr "新番與重播"
149
150 msgctxt "#30105"
151 msgid "New only"
152 msgstr "僅新番"
153
154 msgctxt "#30106"
155 msgid "Live only"
156 msgstr "僅直播節目"
21157
22158 msgctxt "#30107"
23159 msgid "Channel:"
27163 msgid "Any Channel"
28164 msgstr "任何頻道"
29165
166 msgctxt "#30110"
167 msgid "Airtime:"
168 msgstr "播放時間:"
169
30170 msgctxt "#30111"
31171 msgid "Anytime"
32172 msgstr "任何時間"
33173
174 msgctxt "#30120"
175 msgid "Delete Timer"
176 msgstr "刪除定時器"
177
178 msgctxt "#30121"
179 msgid "Delete this episode timer only"
180 msgstr "僅刪除本集的定時器"
181
34182 msgctxt "#30122"
35183 msgid "Delete the entire series"
36184 msgstr "刪除整個系列"
37185
186 msgctxt "#30130"
187 msgid "Created by Repeating Timer"
188 msgstr "用重複定時器來產生"
189
190 msgctxt "#30131"
191 msgid "One time (manual)"
192 msgstr "單次 (首動)"
193
194 msgctxt "#30132"
195 msgid "One time (guide)"
196 msgstr "單次 (節目指南)"
197
198 msgctxt "#30133"
199 msgid "One time (wishlist)"
200 msgstr "單次 (期望清單)"
201
202 msgctxt "#30134"
203 msgid "Repeating (manual)"
204 msgstr "重複 (手動)"
205
206 msgctxt "#30135"
207 msgid "Repeating (guide)"
208 msgstr "重複 (節目指南)"
209
210 msgctxt "#30136"
211 msgid "Repeating (wishlist)"
212 msgstr "重複 (期望清單)"
213
38214 msgctxt "#30140"
39215 msgid "Normal"
40216 msgstr "一般"
41217
42218 msgctxt "#30141"
43219 msgid "High"
44 msgstr "高溫"
220 msgstr "高"
45221
46222 msgctxt "#30142"
47223 msgid "Low"
48 msgstr "低溫"
224 msgstr "低"
225
226 msgctxt "#30150"
227 msgid "New Episodes Only"
228 msgstr "僅新番"
229
230 msgctxt "#30151"
231 msgid "New and Rerun Episodes"
232 msgstr "新番及重播"
233
234 msgctxt "#30152"
235 msgid "Live Only"
236 msgstr "僅直播節目"
237
238 msgctxt "#30160"
239 msgid "Not Set"
240 msgstr "未設定"
241
242 msgctxt "#30161"
243 msgid "Keep Latest Recordings"
244 msgstr "保留最新的錄影檔"
245
246 msgctxt "#30162"
247 msgid "Keep Until I Watch"
248 msgstr "保留至我看完"
249
250 msgctxt "#30163"
251 msgid "Keep Until Space Needed"
252 msgstr "保留至空間不足"
253
254 msgctxt "#30164"
255 msgid "Keep Until I Delete"
256 msgstr "保留至被我刪除"
257
258 msgctxt "#30165"
259 msgid "Keep For 1 Week"
260 msgstr "保留1週"
261
262 msgctxt "#30170"
263 msgid "Keep As Many As Possible"
264 msgstr "能放多少放多少"
265
266 msgctxt "#30171"
267 msgid "Keep 1 Recording"
268 msgstr "保留1個錄影檔"
269
270 msgctxt "#30172"
271 msgid "Keep 2 Recordings"
272 msgstr "保留2個錄影檔"
273
274 msgctxt "#30173"
275 msgid "Keep 3 Recordings"
276 msgstr "保留3個錄影檔"
277
278 msgctxt "#30174"
279 msgid "Keep 4 Recordings"
280 msgstr "保留4個錄影檔"
281
282 msgctxt "#30175"
283 msgid "Keep 5 Recordings"
284 msgstr "保留5個錄影檔"
285
286 msgctxt "#30176"
287 msgid "Keep 6 Recordings"
288 msgstr "保留6個錄影檔"
289
290 msgctxt "#30177"
291 msgid "Keep 7 Recordings"
292 msgstr "保留7個錄影檔"
293
294 msgctxt "#30178"
295 msgid "Keep 10 Recordings"
296 msgstr "保留10個錄影檔"
1717 *
1818 */
1919
20 #include "libXBMC_addon.h"
20 #include "kodi/libXBMC_addon.h"
2121 #include <string>
2222 #include "p8-platform/os.h"
2323 #include "client.h"
6262 close();
6363 }
6464
65 bool Socket::setHostname ( const CStdString& host )
65 bool Socket::setHostname ( const std::string& host )
6666 {
6767 if (isalpha(host.c_str()[0]))
6868 {
139139 return true;
140140 }
141141
142 int Socket::send( const CStdString& data )
142 int Socket::send( const std::string& data )
143143 {
144144 if (!is_valid())
145145 {
198198 }
199199
200200 //Receive until error or \n
201 bool Socket::ReadResponses(int &code, vector<CStdString> &lines)
201 bool Socket::ReadResponses(int &code, vector<std::string> &lines)
202202 {
203203 int result;
204204 char buffer[4096]; // this buff size has to be known in server
205205 code = 0;
206206
207207 bool readComplete = false;
208 CStdString bigString = "";
208 std::string bigString = "";
209209
210210 do
211211 {
234234 if (EndsWith(bigString, "<EOF>"))
235235 {
236236 readComplete = true; // all server data has benn read
237 lines = split(bigString, "<EOL>", true); // split each reponse by <EOL> delimiters
237 lines = split(bigString, "<EOL>"); // split each reponse by <EOL> delimiters
238238 lines.erase(lines.end() - 1); // erase <EOF> at end
239239 }
240240 else
247247 return readComplete;
248248 }
249249
250 bool Socket::connect ( const CStdString& host, const unsigned short port )
250 bool Socket::connect ( const std::string& host, const unsigned short port )
251251 {
252252 if ( !is_valid() )
253253 {
558558 #endif //TARGET_WINDOWS || TARGET_LINUX || TARGET_DARWIN || TARGET_FREEBSD
559559
560560
561 void Socket::SetServerName(CStdString strServerName)
561 void Socket::SetServerName(std::string strServerName)
562562 {
563563 _serverName = strServerName;
564564 }
565565
566 void Socket::SetClientName(CStdString strClientName)
566 void Socket::SetClientName(std::string strClientName)
567567 {
568568 _clientName = strClientName;
569569 }
573573 _port = port;
574574 }
575575
576 int Socket::SendRequest(CStdString requestStr)
577 {
578 CStdString sRequest;
579 sRequest.Format("%s|%s<Client Quit>", _clientName.c_str(), requestStr.c_str()); // build the request string
576 int Socket::SendRequest(std::string requestStr)
577 {
578 std::string sRequest;
579 sRequest = string_format("%s|%s<Client Quit>", _clientName.c_str(), requestStr.c_str()); // build the request string
580580 int status = send(sRequest);
581581 return status;
582582 }
587587 _timeout = tSec;
588588 }
589589
590 std::vector<CStdString> Socket::GetVector(const CStdString &request, bool allowRetry, bool allowWOL /* = true*/)
590 std::vector<std::string> Socket::GetVector(const std::string &request, bool allowRetry, bool allowWOL /* = true*/)
591591 {
592592 int maxAttempts = 3;
593593 int sleepAttemptsMs = 1000;
595595 P8PLATFORM::CLockObject lock(m_mutex); // only process one request at a time
596596
597597 int code;
598 std::vector<CStdString> reponses;
598 std::vector<std::string> reponses;
599599
600600 int cntAttempts = 1;
601601 while (cntAttempts <= maxAttempts)
616616 XBMC->Log(LOG_INFO, "Socket::GetVector> Sending WOL packet to %s", g_strServerMAC.c_str());
617617 if (g_BackendOnline != BACKEND_UNKNOWN)
618618 {
619 CStdString infoStr = XBMC->GetLocalizedString(30026);
619 std::string infoStr = XBMC->GetLocalizedString(30026);
620620 XBMC->QueueNotification(QUEUE_INFO, infoStr.c_str()); // Notify WOL is being sent
621621 }
622 XBMC->WakeOnLan(g_strServerMAC); // Send WOL request
622 XBMC->WakeOnLan(g_strServerMAC.c_str()); // Send WOL request
623623 }
624624
625625 if (!connect(_serverName, (unsigned short)_port)) // if this fails, it is likely due to server down
670670 return reponses; // return responses
671671 }
672672
673 CStdString Socket::GetString(const CStdString &request, bool allowRetry, bool allowWOL /* = true*/)
674 {
675 std::vector<CStdString> result = GetVector(request, allowRetry, allowWOL);
673 std::string Socket::GetString(const std::string &request, bool allowRetry, bool allowWOL /* = true*/)
674 {
675 std::vector<std::string> result = GetVector(request, allowRetry, allowWOL);
676676 return result[0];
677677 }
678678
679 bool Socket::GetBool(const CStdString &request, bool allowRetry, bool allowWOL /* = true*/)
679 bool Socket::GetBool(const std::string &request, bool allowRetry, bool allowWOL /* = true*/)
680680 {
681681 return GetString(request, allowRetry, allowWOL) == "True";
682682 }
683683
684684
685 int Socket::GetInt(const CStdString &request, bool allowRetry, bool allowWOL /* = true*/)
686 {
687 CStdString valStr = GetString(request, allowRetry, allowWOL);
688 long val = strtol(valStr, 0, 10);
685 int Socket::GetInt(const std::string &request, bool allowRetry, bool allowWOL /* = true*/)
686 {
687 std::string valStr = GetString(request, allowRetry, allowWOL);
688 long val = strtol(valStr.c_str(), 0, 10);
689689 return val;
690690 }
691691
692 long long Socket::GetLL(const CStdString &request, bool allowRetry, bool allowWOL /* = true*/)
693 {
694 CStdString valStr = GetString(request, allowRetry, allowWOL);
695 #ifdef TARGET_WINDOWS
696 long long val = _strtoi64(valStr, 0, 10);
697 #else
698 long long val = strtoll(valStr, NULL, 10);
699 #endif
692 long long Socket::GetLL(const std::string &request, bool allowRetry, bool allowWOL /* = true*/)
693 {
694 std::string valStr = GetString(request, allowRetry, allowWOL);
695 long long val = strtoll(valStr.c_str(), NULL, 10);
700696 return val;
701697 }
178178 _sockaddr.sin_port = htons ( port );
179179 };
180180
181 bool setHostname ( const CStdString& host );
181 bool setHostname ( const std::string& host );
182182
183183 // Server initialization
184184
204204 //bool accept ( Socket& socket ) const;
205205
206206 // Client initialization
207 bool connect ( const CStdString& host, const unsigned short port );
207 bool connect ( const std::string& host, const unsigned short port );
208208
209209 bool reconnect();
210210
216216 * \param data Reference to a std::string with the data to transmit
217217 * \return Number of bytes send or -1 in case of an error
218218 */
219 int send ( const CStdString& data );
219 int send ( const std::string& data );
220220
221221 /*!
222222 * Socket send function
229229
230230 bool set_non_blocking ( const bool );
231231
232 bool ReadResponses(int &code, std::vector<CStdString> &lines);
232 bool ReadResponses(int &code, std::vector<std::string> &lines);
233233
234234 bool is_valid() const;
235235
255255
256256 // client interface
257257 private:
258 CStdString _serverName;
259 CStdString _clientName;
258 std::string _serverName;
259 std::string _clientName;
260260 int _port;
261 int SendRequest(CStdString requestStr);
261 int SendRequest(std::string requestStr);
262262 public:
263 void SetServerName(CStdString strServerName);
264 void SetClientName(CStdString strClientName);
263 void SetServerName(std::string strServerName);
264 void SetClientName(std::string strClientName);
265265 void SetServerPort(int port);
266 std::vector<CStdString> GetVector(const CStdString &request, bool allowRetry, bool allowWOL = true);
267 CStdString GetString(const CStdString &request, bool allowRetry, bool allowWOL = true);
268 bool GetBool(const CStdString &request, bool allowRetry, bool allowWOL = true);
269 int GetInt(const CStdString &request, bool allowRetry, bool allowWOL = true);
270 long long GetLL(const CStdString &request, bool allowRetry, bool allowWOL = true);
266 std::vector<std::string> GetVector(const std::string &request, bool allowRetry, bool allowWOL = true);
267 std::string GetString(const std::string &request, bool allowRetry, bool allowWOL = true);
268 bool GetBool(const std::string &request, bool allowRetry, bool allowWOL = true);
269 int GetInt(const std::string &request, bool allowRetry, bool allowWOL = true);
270 long long GetLL(const std::string &request, bool allowRetry, bool allowWOL = true);
271271
272272 void SetTimeOut(int tSec);
273273 };
1818 */
1919
2020 #include "client.h"
21 #include "xbmc_pvr_dll.h"
21 #include "kodi/xbmc_pvr_dll.h"
2222 #include "pvr2wmc.h"
2323 #include "utilities.h"
2424 #include "p8-platform/util/util.h"
2525
26 using namespace std;
2726 using namespace ADDON;
2827
29 #ifdef TARGET_WINDOWS
30 #define snprintf _snprintf
31 #endif
3228
3329 #define DEFAULT_PORT 9080
3430 #define DEFAULT_WAKEONLAN_ENABLE false
4339 PVR_CHANNEL _currentChannel;
4440 PVR_MENUHOOK *menuHook = NULL;
4541
46 CStdString g_strServerName; // the name of the server to connect to
47 CStdString g_strClientName; // the name of the computer running addon
42 std::string g_strServerName; // the name of the server to connect to
43 std::string g_strClientName; // the name of the computer running addon
4844 int g_port;
4945 bool g_bWakeOnLAN; // whether to send wake on LAN to server
50 CStdString g_strServerMAC; // MAC address of server
46 std::string g_strServerMAC; // MAC address of server
5147 bool g_bSignalEnable;
5248 int g_signalThrottle;
5349 bool g_bEnableMultiResume;
54 CStdString g_clientOS; // OS of client, passed to server
50 std::string g_clientOS; // OS of client, passed to server
5551
5652 backend_status g_BackendOnline; // whether the backend is online
5753
5955 * Default values are defined inside client.h
6056 * and exported to the other source files.
6157 */
62 CStdString g_strUserPath = "";
63 CStdString g_strClientPath = "";
64 CStdString g_AddonDataCustom = ""; // location of custom addondata settings file
58 std::string g_strUserPath = "";
59 std::string g_strClientPath = "";
60 std::string g_AddonDataCustom = ""; // location of custom addondata settings file
6561
6662 CHelper_libXBMC_addon *XBMC = NULL;
6763 CHelper_libXBMC_pvr *PVR = NULL;
106102 XBMC->Log(LOG_ERROR, "Couldn't get 'wake_on_lan' setting, using '%s'", DEFAULT_WAKEONLAN_ENABLE);
107103 }
108104
109 CStdString fileContent;
105 std::string fileContent;
110106 if (ReadFileContents(g_AddonDataCustom, fileContent))
111107 {
112108 g_strServerMAC = fileContent;
138134 g_strClientName = buffer; // send this computers name to server
139135
140136 #ifdef TARGET_WINDOWS
141 // get windows version
142 OSVERSIONINFO osvi;
143 ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
144 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
145 GetVersionEx(&osvi);
146 g_clientOS.Format("windows(%d.%d)", osvi.dwMajorVersion, osvi.dwMinorVersion); // set windows version string
137 g_clientOS = "windows"; // set to the client OS name
147138 #elif defined TARGET_LINUX
148139 g_clientOS = "linux"; // set to the client OS name
149140 #elif defined TARGET_DARWIN
151142 #elif defined TARGET_FREEBSD
152143 g_clientOS = "freeBSD"; // set to the client OS name
153144 #else
154 g_clientOS = ""; // set blank client OS name
145 g_clientOS = ""; // set blank client OS name
155146 #endif
156147 }
157148
165156
166157 // register the addon
167158 XBMC = new CHelper_libXBMC_addon;
159
168160 if (!XBMC->RegisterMe(hdl))
169161 {
170162 SAFE_DELETE(XBMC);
230222 _CurStatus = ADDON_STATUS_UNKNOWN;
231223 }
232224
233 bool ADDON_HasSettings()
234 {
235 return true;
236 }
237
238 unsigned int ADDON_GetSettings(ADDON_StructSetting ***sSet)
239 {
240 return 0;
241 }
242
243225 // Called everytime a setting is changed by the user and to inform AddOn about
244226 // new setting and to do required stuff to apply it.
245227 ADDON_STATUS ADDON_SetSetting(const char *settingName, const void *settingValue)
247229 if (!XBMC)
248230 return ADDON_STATUS_OK;
249231
250 CStdString sName = settingName;
232 std::string sName = settingName;
251233
252234 if (sName == "host")
253235 {
254 CStdString oldName = g_strServerName;
236 std::string oldName = g_strServerName;
255237 g_strServerName = (const char*)settingValue;
256 //if (g_strServerName == ".")
257 // g_strServerName = LOCALHOST;
238
258239 XBMC->Log(LOG_INFO, "Setting 'host' changed from %s to %s", g_strServerName.c_str(), (const char*) settingValue);
259240 if (oldName != g_strServerName)
260241 return ADDON_STATUS_NEED_RESTART;
263244 return ADDON_STATUS_OK;
264245 }
265246
266 void ADDON_Stop()
267 {
268 }
269
270 void ADDON_FreeSettings()
271 {
272 }
273
274247 /***********************************************************
275248 * PVR Client AddOn specific public library functions
276249 ***********************************************************/
289262
290263 void OnPowerSavingDeactivated()
291264 {
292 }
293
294 const char* GetPVRAPIVersion(void)
295 {
296 static const char *strApiVersion = XBMC_PVR_API_VERSION;
297 return strApiVersion;
298 }
299
300 const char* GetMininumPVRAPIVersion(void)
301 {
302 static const char *strMinApiVersion = XBMC_PVR_MIN_API_VERSION;
303 return strMinApiVersion;
304 }
305
306 const char* GetGUIAPIVersion(void)
307 {
308 return ""; // GUI API not used
309 }
310
311 const char* GetMininumGUIAPIVersion(void)
312 {
313 return ""; // GUI API not used
314265 }
315266
316267 PVR_ERROR GetAddonCapabilities(PVR_ADDON_CAPABILITIES* pCapabilities)
327278 pCapabilities->bHandlesDemuxing = false;
328279 pCapabilities->bSupportsRecordingPlayCount = true;
329280 pCapabilities->bSupportsLastPlayedPosition = g_bEnableMultiResume;
330 pCapabilities->bSupportsRecordingEdl = false;
281 pCapabilities->bSupportsRecordingEdl = true;
282 pCapabilities->bSupportsRecordingsRename = true;
283 pCapabilities->bSupportsRecordingsLifetimeChange = false;
284 pCapabilities->bSupportsDescrambleInfo = false;
331285
332286 return PVR_ERROR_NO_ERROR;
333287 }
348302
349303 const char *GetConnectionString(void)
350304 {
351 static CStdString strConnectionString;
352 strConnectionString.Format("%s:%u", g_strServerName, g_port);
305 static std::string strConnectionString;
306 strConnectionString = string_format("%s:%u", g_strServerName.c_str(), g_port);
353307 return strConnectionString.c_str();
354308 }
355309
374328 return PVR_ERROR_SERVER_ERROR;
375329 }
376330
377 PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties)
378 {
331
332 PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus)
333 {
334 if (_wmc)
335 return _wmc->SignalStatus(signalStatus);
336
337 return PVR_ERROR_NO_ERROR;
338 }
339
340 // channel functions -----------------------------
341
342 int GetChannelsAmount(void)
343 {
344 if (_wmc)
345 return _wmc->GetChannelsAmount();
346
347 return -1;
348 }
349
350 PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio)
351 {
352 if (_wmc)
353 return _wmc->GetChannels(handle, bRadio);
354
355 return PVR_ERROR_SERVER_ERROR;
356 }
357
358 int GetChannelGroupsAmount(void)
359 {
360 if (_wmc)
361 return _wmc->GetChannelGroupsAmount();
362
363 return -1;
364 }
365
366 PVR_ERROR GetChannelGroups(ADDON_HANDLE handle, bool bRadio)
367 {
368 if (_wmc)
369 return _wmc->GetChannelGroups(handle, bRadio);
370
371 return PVR_ERROR_SERVER_ERROR;
372 }
373
374 PVR_ERROR GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group)
375 {
376 if (_wmc)
377 return _wmc->GetChannelGroupMembers(handle, group);
378
379 return PVR_ERROR_SERVER_ERROR;
380 }
381
382
383 // timer functions -----------------------
384
385 PVR_ERROR GetTimerTypes(PVR_TIMER_TYPE types[], int *size)
386 {
387 if (_wmc)
388 return _wmc->GetTimerTypes(types, size);
389
379390 return PVR_ERROR_NOT_IMPLEMENTED;
380391 }
381392
382 PVR_ERROR SignalStatus(PVR_SIGNAL_STATUS &signalStatus)
383 {
384 if (_wmc)
385 return _wmc->SignalStatus(signalStatus);
386
387 return PVR_ERROR_NO_ERROR;
388 }
389
390 // channel functions
391 int GetChannelsAmount(void)
392 {
393 if (_wmc)
394 return _wmc->GetChannelsAmount();
395
396 return -1;
397 }
398
399 PVR_ERROR GetChannels(ADDON_HANDLE handle, bool bRadio)
400 {
401 if (_wmc)
402 return _wmc->GetChannels(handle, bRadio);
393 int GetTimersAmount(void)
394 {
395 if (_wmc)
396 return _wmc->GetTimersAmount();
403397
404398 return PVR_ERROR_SERVER_ERROR;
405399 }
406400
407 int GetChannelGroupsAmount(void)
408 {
409 if (_wmc)
410 return _wmc->GetChannelGroupsAmount();
411
412 return -1;
413 }
414
415 PVR_ERROR GetChannelGroups(ADDON_HANDLE handle, bool bRadio)
416 {
417 if (_wmc)
418 return _wmc->GetChannelGroups(handle, bRadio);
419
420 return PVR_ERROR_SERVER_ERROR;
421 }
422
423 PVR_ERROR GetChannelGroupMembers(ADDON_HANDLE handle, const PVR_CHANNEL_GROUP &group)
424 {
425 if (_wmc)
426 return _wmc->GetChannelGroupMembers(handle, group);
427
428 return PVR_ERROR_SERVER_ERROR;
429 }
430
431
432 // timer functions
433 PVR_ERROR GetTimerTypes(PVR_TIMER_TYPE types[], int *size)
434 {
435 if (_wmc)
436 return _wmc->GetTimerTypes(types, size);
437
438 return PVR_ERROR_NOT_IMPLEMENTED;
439 }
440
441 int GetTimersAmount(void)
442 {
443 if (_wmc)
444 return _wmc->GetTimersAmount();
445
446 return PVR_ERROR_SERVER_ERROR;
447 }
448
449401 PVR_ERROR GetTimers(ADDON_HANDLE handle)
450402 {
451 /* TODO: Change implementation to get support for the timer features introduced with PVR API 1.9.7 */
452403 if (_wmc)
453404 return _wmc->GetTimers(handle);
454405
500451 return PVR_ERROR_NOT_IMPLEMENTED;
501452 }
502453
503 //#define TRUESWITCH
504
505 bool SwitchChannel(const PVR_CHANNEL &channel)
506 {
507 //CloseLiveStream();
508 #ifdef TRUESWITCH
509
510 if (_wmc)
511 {
512 return _wmc->SwitchChannel(channel);
513 }
514 return false;
515 #else
516 return OpenLiveStream(channel); // this will perform the closing of a current live stream itself
517 #endif
518 }
519
520 // live stream functions
454
455 // live stream functions ---------------------------
456
521457 bool OpenLiveStream(const PVR_CHANNEL &channel)
522458 {
523459 if (_wmc)
524460 {
525 //CloseLiveStream();
526461 if (_wmc->OpenLiveStream(channel))
527462 {
528463 _bIsPlaying = true;
590525 return true;
591526 }
592527
593 // recorded stream functions (other "Open" these just call the live stream functions)
528 // recorded stream functions -----------------------------
529
594530 bool OpenRecordedStream(const PVR_RECORDING &recording)
595531 {
596532 if (_wmc)
647583 return -1;
648584 }
649585
650 // recorded file functions
586 // recorded file functions -----------------
587
651588 PVR_ERROR DeleteRecording(const PVR_RECORDING &recording)
652589 {
653590 if (_wmc)
662599 return _wmc->SetRecordingLastPlayedPosition(recording, lastplayedposition);
663600 return PVR_ERROR_NOT_IMPLEMENTED;
664601 }
602
665603 int GetRecordingLastPlayedPosition(const PVR_RECORDING &recording)
666604 {
667605 if (_wmc && g_bEnableMultiResume)
676614 return PVR_ERROR_NOT_IMPLEMENTED;
677615 }
678616
679
680 PVR_ERROR CallMenuHook(const PVR_MENUHOOK &menuhook, const PVR_MENUHOOK_DATA &item)
681 {
682 return PVR_ERROR_NOT_IMPLEMENTED;
683 }
617 // time shift functions -----------------
684618
685619 bool IsTimeshifting(void)
686620 {
689623 else
690624 return false;
691625 }
692 time_t GetPlayingTime()
693 {
694 if (_wmc)
695 return _wmc->GetPlayingTime();
696 else
697 return 0;
698 }
699 time_t GetBufferTimeStart()
700 {
701 if (_wmc)
702 return _wmc->GetBufferTimeStart();
703 else
704 return 0;
705 }
706 time_t GetBufferTimeEnd()
707 {
708 if (_wmc)
709 return _wmc->GetBufferTimeEnd();
710 else
711 return 0;
626
627 PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES *strTimes)
628 {
629 if (_wmc)
630 return _wmc->GetStreamTimes(strTimes);
631 else
632 return PVR_ERROR_SERVER_ERROR;
633 }
634
635
636 PVR_ERROR GetRecordingEdl(const PVR_RECORDING &recording, PVR_EDL_ENTRY edlEntries[], int *count)
637 {
638 if (_wmc)
639 return _wmc->GetRecordingEdl(recording, edlEntries, count);
640 else
641 return PVR_ERROR_SERVER_ERROR;
712642 }
713643
714644 /** UNUSED API FUNCTIONS */
722652 void DemuxFlush(void) {}
723653 void DemuxAbort(void) {}
724654 DemuxPacket* DemuxRead(void) { return NULL; }
725 unsigned int GetChannelSwitchDelay(void) { return 0; }
726 const char * GetLiveStreamURL(const PVR_CHANNEL &channel) { return ""; }
727 bool SeekTime(int,bool,double*) { return false; }
655 bool SeekTime(double,bool,double*) { return false; }
728656 void SetSpeed(int) {};
729657 bool IsRealTimeStream(void) { return true; }
730 PVR_ERROR GetRecordingEdl(const PVR_RECORDING&, PVR_EDL_ENTRY[], int*) { return PVR_ERROR_NOT_IMPLEMENTED; };
731658 PVR_ERROR UndeleteRecording(const PVR_RECORDING& recording) { return PVR_ERROR_NOT_IMPLEMENTED; }
732659 PVR_ERROR DeleteAllRecordingsFromTrash() { return PVR_ERROR_NOT_IMPLEMENTED; }
733660 PVR_ERROR SetEPGTimeFrame(int) { return PVR_ERROR_NOT_IMPLEMENTED; }
734
661 PVR_ERROR GetDescrambleInfo(PVR_DESCRAMBLE_INFO*) { return PVR_ERROR_NOT_IMPLEMENTED; }
662 PVR_ERROR SetRecordingLifetime(const PVR_RECORDING*) { return PVR_ERROR_NOT_IMPLEMENTED; }
663 PVR_ERROR CallMenuHook(const PVR_MENUHOOK &menuhook, const PVR_MENUHOOK_DATA &item) { return PVR_ERROR_NOT_IMPLEMENTED; }
664
665 PVR_ERROR IsEPGTagPlayable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; }
666 PVR_ERROR IsEPGTagRecordable(const EPG_TAG*, bool*) { return PVR_ERROR_NOT_IMPLEMENTED; }
667 PVR_ERROR GetEPGTagStreamProperties(const EPG_TAG*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; }
668 PVR_ERROR GetEPGTagEdl(const EPG_TAG* epgTag, PVR_EDL_ENTRY edl[], int *size) { return PVR_ERROR_NOT_IMPLEMENTED; }
669
670 PVR_ERROR GetStreamProperties(PVR_STREAM_PROPERTIES* pProperties) { return PVR_ERROR_NOT_IMPLEMENTED; }
671 PVR_ERROR GetChannelStreamProperties(const PVR_CHANNEL* channel, PVR_NAMED_VALUE* properties, unsigned int* iPropertiesCount) { return PVR_ERROR_NOT_IMPLEMENTED; }
672 PVR_ERROR GetRecordingStreamProperties(const PVR_RECORDING*, PVR_NAMED_VALUE*, unsigned int*) { return PVR_ERROR_NOT_IMPLEMENTED; }
673 PVR_ERROR GetStreamReadChunkSize(int* chunksize) { return PVR_ERROR_NOT_IMPLEMENTED; }
735674 }
1818 */
1919 #pragma once
2020
21 #include "libXBMC_addon.h"
22 #include "libXBMC_pvr.h"
23 #include "libKODI_guilib.h"
24 #include "p8-platform/util/StdString.h"
21
22 #include "kodi/libXBMC_addon.h"
23 #include "kodi/libXBMC_pvr.h"
24 #include "kodi/libKODI_guilib.h"
25 #include <p8-platform/util/StringUtils.h>
2526
2627 #include "clientversion.h"
2728
29 #define string_format StringUtils::Format
30 #define split StringUtils::Split
31
2832 extern bool m_bCreated;
29 extern CStdString g_strUserPath;
30 extern CStdString g_strClientPath;
31 extern CStdString g_strServerName; // the name of the server to connect to
32 extern CStdString g_strClientName; // the name of the computer running addon
33 extern CStdString g_clientOS; // OS of client, passed to server
33 extern std::string g_strUserPath;
34 extern std::string g_strClientPath;
35 extern std::string g_strServerName; // the name of the server to connect to
36 extern std::string g_strClientName; // the name of the computer running addon
37 extern std::string g_clientOS; // OS of client, passed to server
3438 extern int g_port;
3539 extern bool g_bSignalEnable;
3640 extern int g_signalThrottle;
3741 extern bool g_bEnableMultiResume;
3842 extern ADDON::CHelper_libXBMC_addon *XBMC;
3943 extern CHelper_libXBMC_pvr *PVR;
40 extern CStdString g_strServerMAC;
44 extern std::string g_strServerMAC;
4145 extern bool g_bWakeOnLAN;
42 extern CStdString g_AddonDataCustom;
46 extern std::string g_AddonDataCustom;
4347
4448 enum backend_status
4549 {
1818 */
1919 #pragma once
2020
21 inline CStdString PVRWMC_GetClientVersion()
21 inline std::string PVRWMC_GetClientVersion()
2222 {
23 return "1.3.0"; // ALSO CHANGE IN REV NUMBER in 'pvr.wmc/addon.xml.in'
23 return "2.4.4"; // ALSO CHANGE IN REV NUMBER in 'pvr.wmc/addon.xml.in'
2424 }
3131 #define null NULL
3232
3333 #define STRCPY(dest, src) strncpy(dest, src, sizeof(dest)-1);
34 #define FOREACH(ss, vv) for(std::vector<CStdString>::iterator ss = vv.begin(); ss != vv.end(); ++ss)
35
36 #define FAKE_TS_LENGTH 2000000 // a fake file length for give to xbmc (used to insert duration headers)
34 #define FOREACH(ss, vv) for(std::vector<std::string>::iterator ss = vv.begin(); ss != vv.end(); ++ss)
3735
3836 int64_t _lastRecordingUpdateTime; // the time of the last recording display update
3937
40 int _buffTimesCnt; // filter how often we do buffer status reads
41 int _buffTimeFILTER;
38 long _buffTimesCnt; // filter how often we do buffer status reads
39 long _buffTimeFILTER;
4240
4341 Pvr2Wmc::Pvr2Wmc(void)
4442 {
5856
5957 _initialStreamResetCnt = 0; // used to count how many times we reset the stream position (due to 2 pass demuxer)
6058 _initialStreamPosition = 0; // used to set an initial position (multiple clients watching the same live tv buffer)
61
62 _insertDurationHeader = false; // if true, insert a duration header for active Rec TS file
63 _durationHeader = ""; // the header to insert (received from server)
6459
6560 _lastRecordingUpdateTime = 0; // time of last recording display update
6661 _lostStream = false; // set to true if stream is lost
8075
8176 bool Pvr2Wmc::IsServerDown()
8277 {
83 CStdString request;
84 request.Format("GetServiceStatus|%s|%s", PVRWMC_GetClientVersion(), g_clientOS);
78 std::string request;
79 request = string_format("GetServiceStatus|%s|%s", PVRWMC_GetClientVersion().c_str(), g_clientOS.c_str());
8580 _socketClient.SetTimeOut(10); // set a timout interval for checking if server is down
86 vector<CStdString> results = _socketClient.GetVector(request, true); // get serverstatus
81 vector<std::string> results = _socketClient.GetVector(request, true); // get serverstatus
8782 bool isServerDown = (results[0] != "True"); // true if server is down
8883
8984 // GetServiceStatus may return any updates requested by server
10499 {
105100 if (!IsServerDown())
106101 {
107 static CStdString strVersion = "0.0";
102 static std::string strVersion = "0.0";
108103
109104 // Send client's time (in UTC) to backend
110105 time_t now = time(NULL);
112107 strftime(datestr, 32, "%Y-%m-%d %H:%M:%S", gmtime(&now));
113108
114109 // Also send this client's setting for backend servername (so server knows how it is being accessed)
115 CStdString request;
116 request.Format("GetServerVersion|%s|%s", datestr, g_strServerName.c_str());
117 vector<CStdString> results = _socketClient.GetVector(request, true);
110 std::string request;
111 request = string_format("GetServerVersion|%s|%s", datestr, g_strServerName.c_str());
112 vector<std::string> results = _socketClient.GetVector(request, true);
118113 if (results.size() > 0)
119114 {
120 strVersion = CStdString(results[0]);
115 strVersion = std::string(results[0]);
121116 }
122117 if (results.size() > 1)
123118 {
124 _serverBuild = atoi(results[1]); // get server build number for feature checking
119 _serverBuild = atoi(results[1].c_str()); // get server build number for feature checking
125120 }
126121 // check if recorded tv folder is accessible from client
127122 if (results.size() > 2 && results[2] != "") // if server sends empty string, skip check
128123 {
129 if (!XBMC->DirectoryExists(results[2]))
124 if (!XBMC->DirectoryExists(results[2].c_str()))
130125 {
131126 XBMC->Log(LOG_ERROR, "Recorded tv '%s' does not exist", results[2].c_str());
132 CStdString infoStr = XBMC->GetLocalizedString(30017);
127 std::string infoStr = XBMC->GetLocalizedString(30017);
133128 XBMC->QueueNotification(QUEUE_ERROR, infoStr.c_str());
134129 }
135 else if (!XBMC->CanOpenDirectory(results[2]))
130 else if (!XBMC->CanOpenDirectory(results[2].c_str()))
136131 {
137132 XBMC->Log(LOG_ERROR, "Recorded tv '%s' count not be opened", results[2].c_str());
138 CStdString infoStr = XBMC->GetLocalizedString(30018);
133 std::string infoStr = XBMC->GetLocalizedString(30018);
139134 XBMC->QueueNotification(QUEUE_ERROR, infoStr.c_str());
140135 }
141136 }
478473 }
479474
480475 // test for returned error vector from server, handle accompanying messages if any
481 bool isServerError(vector<CStdString> results)
476 bool isServerError(vector<std::string> results)
482477 {
483478 if (results[0] == "error")
484479 {
491486 int errorID = atoi(results[2].c_str());
492487 if (errorID != 0)
493488 {
494 CStdString errStr = XBMC->GetLocalizedString(errorID);
489 std::string errStr = XBMC->GetLocalizedString(errorID);
495490 XBMC->QueueNotification(QUEUE_ERROR, errStr.c_str());
496491 }
497492 }
502497 }
503498
504499 // look at result vector from server and perform any updates requested
505 void Pvr2Wmc::TriggerUpdates(vector<CStdString> results)
500 void Pvr2Wmc::TriggerUpdates(vector<std::string> results)
506501 {
507502 FOREACH(response, results)
508503 {
509 vector<CStdString> v = split(*response, "|"); // split to unpack string
504 vector<std::string> v = split(*response, "|"); // split to unpack string
510505
511506 if (v.size() < 1)
512507 {
539534 }
540535
541536 XBMC->Log(LOG_INFO, "Received message from backend: %s", response->c_str());
542 CStdString infoStr;
537 std::string infoStr;
543538
544539 // Get notification level
545540 int level = atoi(v[1].c_str());
587582 }
588583 }
589584
590 void Pvr2Wmc::ExtractDriveSpace(vector<CStdString> results)
585 void Pvr2Wmc::ExtractDriveSpace(vector<std::string> results)
591586 {
592587 FOREACH(response, results)
593588 {
594 vector<CStdString> v = split(*response, "|"); // split to unpack string
589 vector<std::string> v = split(*response, "|"); // split to unpack string
595590
596591 if (v.size() < 1)
597592 {
618613 if (IsServerDown())
619614 return PVR_ERROR_SERVER_ERROR;
620615
621 CStdString request;
622 request.Format("GetChannels|%s", bRadio ? "True" : "False");
623 vector<CStdString> results = _socketClient.GetVector(request, true);
616 std::string request;
617 request = string_format("GetChannels|%s", bRadio ? "True" : "False");
618 vector<std::string> results = _socketClient.GetVector(request, true);
624619
625620 FOREACH(response, results)
626621 {
627622 PVR_CHANNEL xChannel;
628623
629624 memset(&xChannel, 0, sizeof(PVR_CHANNEL)); // set all mem to zero
630 vector<CStdString> v = split(*response, "|");
625 vector<std::string> v = StringUtils::Split(*response, "|");
631626 // packing: id, bradio, c.OriginalNumber, c.CallSign, c.IsEncrypted, imageStr, c.IsBlocked
632627
633628 if (v.size() < 9)
637632 }
638633
639634 // Populate Channel (and optionally subchannel if one was provided)
640 vector<CStdString> c = split(v[7], ".");
635 vector<std::string> c = split(v[7], ".");
641636 if (c.size() > 1)
642637 {
643638 xChannel.iChannelNumber = atoi(c[0].c_str());
652647 xChannel.bIsRadio = Str2Bool(v[1]);
653648 STRCPY(xChannel.strChannelName, v[3].c_str());
654649 xChannel.iEncryptionSystem = Str2Bool(v[4]);
655 if (v[5].compare("NULL") != 0) // if icon path is null
650 if (v[5].compare("NULL") != 0) // if icon path is not null
656651 STRCPY(xChannel.strIconPath, v[5].c_str());
657652 xChannel.bIsHidden = Str2Bool(v[6]);
658653
659 // Populate Stream DLNA URL if present
660 if (v.size() >= 10 && v[9] != "")
661 {
662 STRCPY(xChannel.strStreamURL, v[9].c_str());
663 }
664
665654 PVR->TransferChannelEntry(handle, &xChannel);
666655 }
667656 return PVR_ERROR_NO_ERROR;
680669 if (IsServerDown())
681670 return PVR_ERROR_SERVER_ERROR;
682671
683 CStdString request;
684 request.Format("GetChannelGroups|%s", bRadio ? "True" : "False");
685 vector<CStdString> results = _socketClient.GetVector(request, true);
672 std::string request;
673 request = string_format("GetChannelGroups|%s", bRadio ? "True" : "False");
674 vector<std::string> results = _socketClient.GetVector(request, true);
686675
687676 FOREACH(response, results)
688677 {
689678 PVR_CHANNEL_GROUP xGroup;
690679 memset(&xGroup, 0, sizeof(PVR_CHANNEL_GROUP));
691680
692 vector<CStdString> v = split(*response, "|");
681 vector<std::string> v = split(*response, "|");
693682
694683 if (v.size() < 1)
695684 {
717706 if (IsServerDown())
718707 return PVR_ERROR_SERVER_ERROR;
719708
720 CStdString request;
721 request.Format("GetChannelGroupMembers|%s|%s", group.bIsRadio ? "True" : "False", group.strGroupName);
722 vector<CStdString> results = _socketClient.GetVector(request, true);
709 std::string request;
710 request = string_format("GetChannelGroupMembers|%s|%s", group.bIsRadio ? "True" : "False", group.strGroupName);
711 vector<std::string> results = _socketClient.GetVector(request, true);
723712
724713 FOREACH(response, results)
725714 {
726715 PVR_CHANNEL_GROUP_MEMBER xGroupMember;
727716 memset(&xGroupMember, 0, sizeof(PVR_CHANNEL_GROUP_MEMBER));
728717
729 vector<CStdString> v = split(*response, "|");
718 vector<std::string> v = split(*response, "|");
730719
731720 if (v.size() < 2)
732721 {
749738 if (IsServerDown())
750739 return PVR_ERROR_SERVER_ERROR;
751740
752 CStdString request;
753 request.Format("GetEntries|%d|%d|%d", channel.iUniqueId, iStart, iEnd); // build the request string
754
755 vector<CStdString> results = _socketClient.GetVector(request, true); // get entries from server
741 std::string request;
742 request = string_format("GetEntries|%u|%lld|%lld", channel.iUniqueId, (long long)iStart, (long long)iEnd); // build the request string
743
744 vector<std::string> results = _socketClient.GetVector(request, true); // get entries from server
756745
757746 FOREACH(response, results)
758747 {
759748 EPG_TAG xEpg;
760749 memset(&xEpg, 0, sizeof(EPG_TAG)); // set all mem to zero
761 vector<CStdString> v = split(*response, "|"); // split to unpack string
750 vector<std::string> v = split(*response, "|"); // split to unpack string
762751
763752 if (v.size() < 16)
764753 {
773762 // e.Program.EpisodeTitle
774763 // (MB3 fields) channelID, audioFormat, GenreString, ProgramType
775764 // actors, directors, writers, year, movieID
765 xEpg.iUniqueChannelId = channel.iUniqueId; // assign unique channel ID
776766 xEpg.iUniqueBroadcastId = atoi(v[0].c_str()); // entry ID
777767 xEpg.strTitle = v[1].c_str(); // entry title
778 xEpg.iChannelNumber = atoi(v[2].c_str()); // channel number
779768 xEpg.startTime = atol(v[3].c_str()); // start time
780769 xEpg.endTime = atol(v[4].c_str()); // end time
781770 xEpg.strPlotOutline = v[5].c_str(); // short plot description (currently using episode name, if there is one)
832821 return PVR_ERROR_SERVER_ERROR;
833822
834823 // Send request to ServerWMC
835 CStdString command = "";
824 std::string command = "";
836825 command = "SetTimerKodi" + Timer2String(xTmr); // convert timer to string
837826
838 vector<CStdString> results = _socketClient.GetVector(command, false); // get results from server
827 vector<std::string> results = _socketClient.GetVector(command, false); // get results from server
839828
840829 PVR->TriggerTimerUpdate(); // update timers regardless of whether there is an error
841830
851840 {
852841 FOREACH(result, results)
853842 {
854 vector<CStdString> splitResult = split(*result, "|"); // split to unpack extra info on each result
855 CStdString infoStr;
843 vector<std::string> splitResult = split(*result, "|"); // split to unpack extra info on each result
844 std::string infoStr;
856845
857846 if (splitResult[0] == "recordingNow") // recording is active now
858847 {
890879 }
891880 }
892881
893 CStdString Pvr2Wmc::Timer2String(const PVR_TIMER &xTmr)
894 {
895 CStdString tStr;
882 std::string Pvr2Wmc::Timer2String(const PVR_TIMER &xTmr)
883 {
884 std::string tStr;
896885
897886 bool bRepeating = xTmr.iTimerType >= TIMER_REPEATING_MIN && xTmr.iTimerType <= TIMER_REPEATING_MAX;
898887 bool bKeyword = xTmr.iTimerType == TIMER_REPEATING_KEYWORD || xTmr.iTimerType == TIMER_ONCE_KEYWORD || xTmr.iTimerType == TIMER_ONCE_KEYWORD_CHILD;
899888 bool bManual = xTmr.iTimerType == TIMER_ONCE_MANUAL || xTmr.iTimerType == TIMER_ONCE_MANUAL_CHILD || xTmr.iTimerType == TIMER_REPEATING_MANUAL;
900889
901 tStr.Format("|%d|%d|%d|%d|%d|%s|%d|%d|%d|%d|%d",
902 xTmr.iClientIndex, xTmr.iClientChannelUid, xTmr.startTime, xTmr.endTime, PVR_TIMER_STATE_NEW, // 0-4
890 //was ("|%d|%d|%d|%d|%d|%s|%d|%d|%d|%d|%d",
891 tStr = string_format("|%u|%d|%lld|%lld|%d|%s|%d|%u|%u|%d|%u",
892 xTmr.iClientIndex, xTmr.iClientChannelUid, (long long)xTmr.startTime, (long long)xTmr.endTime, PVR_TIMER_STATE_NEW, // 0-4
903893 xTmr.strTitle, xTmr.iPriority, xTmr.iMarginStart, xTmr.iMarginEnd, bRepeating, // 5-9
904894 xTmr.iEpgUid); // 10
905895
906896 // Append extra fields from Kodi 16
907 CStdString extra;
908 extra.Format("|%d|%d|%d|%d|%d|%d|%s|%d|%d",
897 std::string extra;
898 //was ("|%d|%d|%d|%d|%d|%d|%s|%d|%d",
899 extra = string_format("|%u|%d|%u|%d|%d|%d|%s|%d|%d",
909900 xTmr.iPreventDuplicateEpisodes, xTmr.bStartAnyTime, xTmr.iWeekdays, // 11-13 param
910901 xTmr.iLifetime, bKeyword, xTmr.bFullTextEpgSearch, xTmr.strEpgSearchString, xTmr.iMaxRecordings, bManual); // 14-19
911902 tStr.append(extra);
920911
921912 bool bRepeating = xTmr.iTimerType >= TIMER_REPEATING_MIN && xTmr.iTimerType <= TIMER_REPEATING_MAX;
922913
923 CStdString command = "DeleteTimerKodi";
924 command.Format("DeleteTimerKodi|%d|%d", xTmr.iClientIndex, bRepeating);
914 std::string command = "DeleteTimerKodi";
915 command = string_format("DeleteTimerKodi|%u|%d", xTmr.iClientIndex, bRepeating);
925916
926 vector<CStdString> results = _socketClient.GetVector(command, false); // get results from server
917 vector<std::string> results = _socketClient.GetVector(command, false); // get results from server
927918
928919 PVR->TriggerTimerUpdate(); // update timers regardless of whether there is an error
929920
943934 if (IsServerDown())
944935 return PVR_ERROR_SERVER_ERROR;
945936
946 vector<CStdString> responsesSeries = _socketClient.GetVector("GetSeriesTimers", true);
937 vector<std::string> responsesSeries = _socketClient.GetVector("GetSeriesTimers", true);
947938 FOREACH(response, responsesSeries)
948939 {
949940 PVR_TIMER xTmr;
950941 memset(&xTmr, 0, sizeof(PVR_TIMER)); // set all struct to zero
951942
952 vector<CStdString> v = split(*response, "|"); // split to unpack string
943 vector<std::string> v = split(*response, "|"); // split to unpack string
953944 if (v.size() < 24)
954945 {
955946 XBMC->Log(LOG_DEBUG, "Wrong number of fields xfered for SeriesTimer data");
961952 // [1] Title (superceded by [17] Timer Name)
962953 xTmr.iClientChannelUid = atoi(v[2].c_str()); // [2] channel id
963954 xTmr.iEpgUid = atoi(v[3].c_str()); // [3] epg ID (same as client ID, except for a 'manual' record)
964 STRCPY(xTmr.strSummary, v[4].c_str()); // [4] currently set to episode description
955 STRCPY(xTmr.strSummary, v[4].c_str()); // [4] currently set to description
965956 xTmr.startTime = atoi(v[5].c_str()); // [5] start time
966957 xTmr.endTime = atoi(v[6].c_str()); // [6] end time
967958 xTmr.iMarginStart = atoi(v[7].c_str()); // [7] rec margin at start (sec)
996987 bool hasKeyword = strlen(xTmr.strEpgSearchString) > 0;
997988 bool hasEPG = (xTmr.iEpgUid != PVR_TIMER_NO_EPG_UID);
998989 xTmr.iTimerType = hasKeyword ? TIMER_REPEATING_KEYWORD : hasEPG ? TIMER_REPEATING_EPG : TIMER_REPEATING_MANUAL;
999
990
1000991 PVR->TransferTimerEntry(handle, &xTmr);
1001992 }
1002993
1003 vector<CStdString> responsesTimers = _socketClient.GetVector("GetTimers", true);
994 vector<std::string> responsesTimers = _socketClient.GetVector("GetTimers", true);
1004995 FOREACH(response, responsesTimers)
1005996 {
1006997 PVR_TIMER xTmr;
1007998 memset(&xTmr, 0, sizeof(PVR_TIMER)); // set all struct to zero
1008999
1009 vector<CStdString> v = split(*response, "|"); // split to unpack string
1000 vector<std::string> v = split(*response, "|"); // split to unpack string
10101001 // eId, chId, start_t, end_t, pState,
10111002 // rp.Program.Title, ""/*recdir*/, rp.Program.EpisodeTitle/*summary?*/, rp.Priority, rp.Request.IsRecurring,
10121003 // eId, preMargin, postMargin, genre, subgenre
10251016 xTmr.state = (PVR_TIMER_STATE)atoi(v[4].c_str()); // [4] current state of time
10261017 STRCPY(xTmr.strTitle, v[5].c_str()); // [5] timer name (set to same as Program title)
10271018 STRCPY(xTmr.strDirectory, v[6].c_str()); // [6] rec directory
1028 STRCPY(xTmr.strSummary, v[7].c_str()); // [7] currently set to episode title
1019 STRCPY(xTmr.strSummary, v[7].c_str()); // [7] set to program description
10291020 // [8] WMC Priority (need Kodi compatible value, see [26])
10301021 // [9] IsRecurring
10311022 xTmr.iEpgUid = atoi(v[10].c_str()); // [10] epg ID
10931084 if (IsServerDown())
10941085 return PVR_ERROR_SERVER_ERROR;
10951086
1096 vector<CStdString> responses = _socketClient.GetVector("GetRecordings", true);
1087 vector<std::string> responses = _socketClient.GetVector("GetRecordings", true);
10971088
10981089 FOREACH(response, responses)
10991090 {
11001091 PVR_RECORDING xRec;
11011092 memset(&xRec, 0, sizeof(PVR_RECORDING)); // set all struct to zero
11021093
1103 vector<CStdString> v = split(*response, "|"); // split to unpack string
1094 vector<std::string> v = split(*response, "|"); // split to unpack string
11041095
11051096 // r.Id, r.Program.Title, r.FileName, recDir, plotOutline,
11061097 // plot, r.Channel.CallSign, ""/*icon path*/, ""/*thumbnail path*/, ToTime_t(r.RecordingTime),
11151106
11161107 STRCPY(xRec.strRecordingId, v[0].c_str());
11171108 STRCPY(xRec.strTitle, v[1].c_str());
1118 STRCPY(xRec.strStreamURL, v[2].c_str());
11191109 STRCPY(xRec.strDirectory, v[3].c_str());
11201110 STRCPY(xRec.strPlotOutline, v[4].c_str());
11211111 STRCPY(xRec.strPlot, v[5].c_str());
11561146 /* TODO: PVR API 5.1.0: Implement this */
11571147 xRec.channelType = PVR_RECORDING_CHANNEL_TYPE_UNKNOWN;
11581148
1159 // fix for advocate99 bug: new recordings won't play until kodi file cache gets a refresh.
1160 // If a recording path is given, but is not in the Kodi cache, use the trick below to force refresh kodi cache.
1161 // Does nothing if swmc doesn't return a path to the recording
1162 if (strlen(xRec.strStreamURL) > 0 && !XBMC->FileExists(xRec.strStreamURL, true/*inCache*/)) // path str exists, but rec is not in Kodi cache
1163 {
1164 CStdString dummyFile = xRec.strStreamURL;
1165 dummyFile += "_new_rec_fix.deleteMe";
1166 if (XBMC->CreateDirectory(dummyFile)) // create a dummy folder
1167 XBMC->RemoveDirectory(dummyFile); // delete the dummy folder if it was created
1168
1169 // check to see if fix worked
1170 if (XBMC->FileExists(xRec.strStreamURL, true))
1171 XBMC->Log(LOG_DEBUG, "recording cache fix for '%s' succeeded", xRec.strStreamURL);
1172 else
1173 XBMC->Log(LOG_DEBUG, "fix for recording cache bug failed for '%s'", xRec.strStreamURL);
1174 }
1175
11761149 PVR->TransferRecordingEntry(handle, &xRec);
11771150 }
11781151
11861159 if (IsServerDown())
11871160 return PVR_ERROR_SERVER_ERROR;
11881161
1189 CStdString command;// = format("DeleteRecording|%s|%s|%s", recording.strRecordingId, recording.strTitle, recording.strStreamURL);
1190 command.Format("DeleteRecording|%s|%s|%s", recording.strRecordingId, recording.strTitle, recording.strStreamURL);
1191
1192 vector<CStdString> results = _socketClient.GetVector(command, false); // get results from server
1162 std::string command;
1163 command = string_format("DeleteRecording|%s|%s|%s", recording.strRecordingId, recording.strTitle, "");
1164
1165 vector<std::string> results = _socketClient.GetVector(command, false); // get results from server
11931166
11941167
11951168 if (isServerError(results)) // did the server do it?
12151188 if (IsServerDown())
12161189 return PVR_ERROR_SERVER_ERROR;
12171190
1218 CStdString command;// = format("RenameRecording|%s|%s", recording.strRecordingId, recording.strTitle);
1219 command.Format("RenameRecording|%s|%s", recording.strRecordingId, recording.strTitle);
1220
1221 vector<CStdString> results = _socketClient.GetVector(command, false); // get results from server
1191 std::string command;// = format("RenameRecording|%s|%s", recording.strRecordingId, recording.strTitle);
1192 command = string_format("RenameRecording|%s|%s", recording.strRecordingId, recording.strTitle);
1193
1194 vector<std::string> results = _socketClient.GetVector(command, false); // get results from server
12221195
12231196 if (isServerError(results)) // did the server do it?
12241197 {
12381211 if (IsServerDown())
12391212 return PVR_ERROR_SERVER_ERROR;
12401213
1241 CStdString command;
1242 command.Format("SetResumePosition|%s|%d", recording.strRecordingId, lastplayedposition);
1243 vector<CStdString> results = _socketClient.GetVector(command, true);
1214 std::string command;
1215 command = string_format("SetResumePosition|%s|%d", recording.strRecordingId, lastplayedposition);
1216
1217 vector<std::string> results = _socketClient.GetVector(command, true);
12441218 PVR->TriggerRecordingUpdate(); // this is needed to get the new resume point actually used by the player (xbmc bug)
12451219 return PVR_ERROR_NO_ERROR;
12461220 }
12531227 if (IsServerDown())
12541228 return PVR_ERROR_SERVER_ERROR;
12551229
1256 CStdString command;
1257 command.Format("GetResumePosition|%s", recording.strRecordingId);
1230 std::string command;
1231 command = string_format("GetResumePosition|%s", recording.strRecordingId);
12581232 int pos = _socketClient.GetInt(command, true);
12591233 return pos;
12601234 }
12651239 if (IsServerDown())
12661240 return PVR_ERROR_SERVER_ERROR;
12671241
1268 CStdString command;
1269 command.Format("SetPlayCount|%s|%d", recording.strRecordingId, count);
1270 vector<CStdString> results = _socketClient.GetVector(command, true);
1242 std::string command;
1243 command = string_format("SetPlayCount|%s|%d", recording.strRecordingId, count);
1244 vector<std::string> results = _socketClient.GetVector(command, true);
12711245 if (count <= 0)
12721246 PVR->TriggerRecordingUpdate(); // this is needed to get the new play count actually used by the player (xbmc bug)
12731247 return PVR_ERROR_NO_ERROR;
12741248 }
12751249
12761250
1277 CStdString Pvr2Wmc::Channel2String(const PVR_CHANNEL &xCh)
1251 std::string Pvr2Wmc::Channel2String(const PVR_CHANNEL &xCh)
12781252 {
12791253 // packing: id, bradio, c.OriginalNumber, c.CallSign, c.IsEncrypted, imageStr, c.IsBlocked
1280 CStdString chStr;
1281 chStr.Format("|%d|%d|%d|%s", xCh.iUniqueId, xCh.bIsRadio, xCh.iChannelNumber, xCh.strChannelName);
1254 std::string chStr;
1255 chStr = string_format("|%u|%d|%u|%s", xCh.iUniqueId, xCh.bIsRadio, xCh.iChannelNumber, xCh.strChannelName);
12821256 return chStr;
12831257 }
12841258
12911265
12921266 _lostStream = true; // init
12931267 _readCnt = 0;
1294 int _buffTimesCnt = 0;
1295 int _buffTimeFILTER = 0;
1268 _buffTimesCnt = 0;
1269 _buffTimeFILTER = 0;
12961270
12971271 CloseLiveStream(false); // close current stream (if any)
12981272
1299 CStdString request = "OpenLiveStream" + Channel2String(channel); // request a live stream using channel
1300 vector<CStdString> results = _socketClient.GetVector(request, false); // try to open live stream, get path to stream file
1273 std::string request = "OpenLiveStream" + Channel2String(channel); // request a live stream using channel
1274 vector<std::string> results = _socketClient.GetVector(request, false); // try to open live stream, get path to stream file
13011275
13021276 if (isServerError(results)) // test if server reported an error
13031277 {
13201294 // Check for a specified initial position and save it for the first ReadLiveStream command to use
13211295 if (results.size() > 2)
13221296 {
1323 _initialStreamPosition = atoll(results[2]);
1297 _initialStreamPosition = atoll(results[2].c_str());
13241298 }
13251299
13261300 _streamFile = XBMC->OpenFile(_streamFileName.c_str(), 0); // open the video file for streaming, same handle
13271301
13281302 if (!_streamFile) // something went wrong
13291303 {
1330 CStdString lastError;
1304 std::string lastError;
13311305 #ifdef TARGET_WINDOWS
13321306 int errorVal = GetLastError();
1333 lastError.Format("Error opening stream file, Win32 error code: %d", errorVal);
1307 lastError = string_format("Error opening stream file, Win32 error code: %d", errorVal);
13341308 #else
1335 lastError.Format("Error opening stream file");
1309 lastError = "Error opening stream file";
13361310 #endif
13371311 XBMC->Log(LOG_ERROR, lastError.c_str()); // log more info on error
13381312
13491323 _lostStream = false; // if we got to here, stream started ok, so set default values
13501324 _lastStreamSize = 0;
13511325 _isStreamFileGrowing = true;
1352 _insertDurationHeader = false; // only used for active recordings
13531326 return true; // stream is up
13541327 }
1355 }
1356
1357 bool Pvr2Wmc::SwitchChannel(const PVR_CHANNEL &channel)
1358 {
1359 CStdString request = "SwitchChannel|" + g_strClientName + Channel2String(channel); // request a live stream using channel
1360 return _socketClient.GetBool(request, false); // try to open live stream, get path to stream file
13611328 }
13621329
13631330
13661333 {
13671334 if (_lostStream) // if stream has already been flagged as lost, return 0 bytes
13681335 return 0; // after this happens a few time, xbmc will call CloseLiveStream
1369
13701336 _readCnt++; // keep a count of the number of reads executed
13711337
13721338 if (!_streamWTV) // if NOT streaming wtv, make sure stream is big enough before it is read
13731339 {
13741340 int timeout = 0; // reset timeout counter
13751341
1342
13761343 // If we are trying to skip to an initial start position (eg we are watching an existing live stream
13771344 // in a multiple client scenario), we need to do it here, as the Seek command didnt work in OpenLiveStream,
13781345 // XBMC just started playing from the start of the file anyway. But once the stream is open, XBMC repeatedly
14061373 }
14071374
14081375 long long currentPos = PositionLiveStream(); // get the current file position
1409
1410 // this is a hack to set the time duration of an ACTIVE recording file. Xbmc reads the ts duration by looking for timestamps
1411 // (pts/dts) toward the end of the ts file. Since our ts file is very small at the start, xbmc skips trying to get the duration
1412 // and just sets it to zero, this makes FF,RW,Skip work poorly and gives bad OSD feedback during playback. The hack is
1413 // to tell xbmc that the ts file is 'FAKE_TS_LENGTH' in length at the start of the playback (see LengthLiveStream). Then when xbmc
1414 // tries to read the duration by probing the end of the file (it starts looking at fileLength-250k), we catch this read below and feed
1415 // it a packet that contains a pts with the duration we want (this packet header is received from the server). After this, everything
1416 // is set back to normal.
1417 if (_insertDurationHeader && FAKE_TS_LENGTH - 250000 == currentPos) // catch xbmc probing for timestamps at end of file
1418 {
1419 //char pcr[16] = {0x47, 0x51, 0x00, 0x19, 0x00, 0x00, 0x01, 0xBD, 0x00, 0x00, 0x85, 0x80, 0x05, 0x21, 0x2E, 0xDF};
1420 _insertDurationHeader = false; // only do header insertion once
1421 memset(pBuffer, 0xFF, iBufferSize); // set buffer to all FF (default padding char for packets)
1422 vector<CStdString> v = split(_durationHeader, " "); // get header bytes by unpacking reponse
1423 for (int i=0; i<16; i++) // insert header bytes, creating a fake packet at start of buffer
1424 {
1425 //*(pBuffer + i) = pcr[i];
1426 *(pBuffer + i) = (char)strtol(v[i].c_str(), NULL, 16);
1427 }
1428 return iBufferSize; // terminate read here after header is inserted
1429 }
1430 // in case something goes wrong, turn off fake header insertion flag.
1431 // the header insertion usually happens around _readCnt=21, so 50 should be safe
1432 if (_readCnt > 50)
1433 _insertDurationHeader = false;
1434
14351376 long long fileSize = _lastStreamSize; // use the last fileSize found, rather than querying host
14361377
14371378 if (_isStreamFileGrowing && currentPos + iBufferSize > fileSize) // if its not big enough for the readsize
14931434 {
14941435 if (!IsServerDown())
14951436 {
1496 CStdString request;
1497 request.Format("CheckError");
1498 //request.Format("CheckError|%d|%d|%d", checkCnt, (long)streamPos, (long)streamfileSize);
1499 vector<CStdString> results = _socketClient.GetVector(request, true); // see if server posted an error for active stream
1437 std::string request;
1438 request = "CheckError";
1439 vector<std::string> results = _socketClient.GetVector(request, true); // see if server posted an error for active stream
15001440 return isServerError(results);
15011441 }
15021442 return false;
15401480 }
15411481 else
15421482 {
1543 CStdString request;
1544 request.Format("StreamFileSize|%d", count); // request stream size form client, passing number of consecutive queries
1483 std::string request;
1484 request = string_format("StreamFileSize|%d", count); // request stream size form client, passing number of consecutive queries
15451485 lFileSize = _socketClient.GetLL(request, true); // get file size form client
15461486
15471487 if (lFileSize < -1) // if server returns a negative file size, it means the stream file is no longer growing (-1 => error)
15571497 // return the length of the current stream file
15581498 long long Pvr2Wmc::LengthLiveStream(void)
15591499 {
1560 if (_insertDurationHeader) // if true, return a fake file 2Mb length to xbmc, this makes xbmc try to determine
1561 return FAKE_TS_LENGTH; // the ts time duration giving us a chance to insert the real duration
15621500 if (_lastStreamSize > 0)
15631501 return _lastStreamSize;
15641502 return -1;
15901528 }
15911529
15921530
1593 // this is only called if a recording is actively being recorded, xbmc detects this when the server
1594 // doesn't enter a path in the strStreamURL field during a "GetRecordings"
15951531 bool Pvr2Wmc::OpenRecordedStream(const PVR_RECORDING &recording)
15961532 {
15971533 if (IsServerDown())
15991535
16001536 _lostStream = true; // init
16011537 _readCnt = 0;
1602 int _buffTimesCnt = 0;
1603 int _buffTimeFILTER = 0;
1538 _buffTimesCnt = 0;
1539 _buffTimeFILTER = 0;
16041540
16051541 // request an active recording stream
1606 CStdString request;
1607 request.Format("OpenRecordingStream|%s", recording.strRecordingId);
1608 vector<CStdString> results = _socketClient.GetVector(request, false); // try to open recording stream, get path to stream file
1542 std::string request;
1543 request = string_format("OpenRecordingStream|%s", recording.strRecordingId);
1544 vector<std::string> results = _socketClient.GetVector(request, false); // try to open recording stream, get path to stream file
16091545
16101546 if (isServerError(results)) // test if server reported an error
16111547 {
16161552 _streamFileName = results[0];
16171553 _streamWTV = EndsWith(_streamFileName, "wtv"); // true if stream file is a wtv file
16181554
1619 // hand additional args from server
1555 // handle additional args from server
16201556 if (results.size() > 1)
16211557 XBMC->Log(LOG_DEBUG, "OpenRecordedStream> rec stream type: %s", results[1].c_str()); // either a 'passive' or 'active' WTV OR a TS file
16221558
16251561 else
16261562 XBMC->Log(LOG_DEBUG, "OpenRecordedStream> opening stream: %s", _streamFileName.c_str());
16271563
1628 if (results.size() > 3 && results[3] != "") // get header to set duration of ts file
1629 {
1630 _durationHeader = results[3];
1631 _insertDurationHeader = true;
1632 }
1633 else
1634 {
1635 _durationHeader = "";
1636 _insertDurationHeader = false;
1637 }
1638
16391564 _streamFile = XBMC->OpenFile(_streamFileName.c_str(), 0); // open the video file for streaming, same handle
16401565
16411566 if (!_streamFile) // something went wrong
16421567 {
1643 CStdString lastError;
1568 std::string lastError;
16441569 #ifdef TARGET_WINDOWS
16451570 int errorVal = GetLastError();
1646 lastError.Format("Error opening stream file, Win32 error code: %d", errorVal);
1571 lastError = string_format("Error opening stream file, Win32 error code: %d", errorVal);
16471572 #else
1648 lastError.Format("Error opening stream file");
1573 lastError = "Error opening stream file";
16491574 #endif
16501575 XBMC->Log(LOG_ERROR, lastError.c_str()); // log more info on error
16511576 _socketClient.GetBool("StreamStartError|" + _streamFileName, true); // tell server stream did not start
16851610 // Reset count to throttle value
16861611 _signalStatusCount = g_signalThrottle;
16871612
1688 CStdString command;
1689 command.Format("SignalStatus");
1690
1691 vector<CStdString> results = _socketClient.GetVector(command, true); // get results from server
1613 std::string command;
1614 command = "SignalStatus";
1615
1616 vector<std::string> results = _socketClient.GetVector(command, true); // get results from server
16921617
16931618 // strDeviceName, strDeviceStatus, strProvider, strService, strMux
16941619 // iSignal, dVideoBitrate, dAudioBitrate, Error
17071632 snprintf(cachedSignalStatus.strProviderName, sizeof(cachedSignalStatus.strProviderName), "%s", results[2].c_str());
17081633 snprintf(cachedSignalStatus.strServiceName, sizeof(cachedSignalStatus.strServiceName), "%s", results[3].c_str());
17091634 snprintf(cachedSignalStatus.strMuxName, sizeof(cachedSignalStatus.strMuxName), "%s", results[4].c_str());
1710 cachedSignalStatus.iSignal = (int)(atoi(results[5]) * 655.35);
1635 cachedSignalStatus.iSignal = (int)(atoi(results[5].c_str()) * 655.35);
17111636
1712 bool error = atoi(results[8]) == 1;
1637 bool error = atoi(results[8].c_str()) == 1;
17131638 if (error)
17141639 {
17151640 // Backend indicates it can't provide SignalStatus for this channel
17271652
17281653 bool Pvr2Wmc::IsTimeShifting()
17291654 {
1730 if (_streamFile) // ?not sure if this should be false if playtime is at buffer end)
1655 if (_streamFile)
17311656 return true;
17321657 else
17331658 return false;
17341659 }
17351660
1736 time_t _buffStart;
1737 time_t _buffEnd;
1738 time_t _buffCurrent;
1739
1740 // get current playing time from swmc remux, this method also recieves buffer start and buffer end
1741 // to minimize traffic to swmc, since Kodi calls this like crazy, the calls are filtered. The size
1742 // of the filter is passed in from swmc
1743 time_t Pvr2Wmc::GetPlayingTime()
1744 {
1745 if (_streamFile && _buffTimesCnt >= _buffTimeFILTER) // filter so we don't query swmc too much
1746 {
1747 _buffTimesCnt = 0;
1748 int64_t filePos = XBMC->GetFilePosition(_streamFile); // get the current file pos so we can convert to play time
1749 CStdString request;
1750 request.Format("GetBufferTimes|%llu", filePos);
1751 vector<CStdString> results = _socketClient.GetVector(request, false); // have swmc convert file pos to current play time
1752
1753 if (results.size() > 3)
1754 {
1755 _buffStart = atol(results[0]);
1756 _buffEnd = atol(results[1]);
1757 _buffCurrent = atol(results[2]);
1758 _buffTimeFILTER = atoi(results[3]); // get filter value from swmc
1759 }
1760 }
1761 _buffTimesCnt++;
1762 return _buffCurrent;
1763 }
1764
1765 time_t Pvr2Wmc::GetBufferTimeStart()
1661 // save the last pos of buffer pointers so that we can filter how often swmc is quered for buff data
1662 time_t _savBuffStart;
1663 int64_t _savBuffEnd;
1664
1665
1666 PVR_ERROR Pvr2Wmc::GetStreamTimes(PVR_STREAM_TIMES *strTimes)
17661667 {
17671668 if (_streamFile)
17681669 {
1769 return _buffStart;
1770 }
1771 return 0;
1772 }
1773
1774 time_t Pvr2Wmc::GetBufferTimeEnd()
1775 {
1776 if (_streamFile)
1777 {
1778 return _buffEnd;
1779 }
1780 return 0;
1781 }
1670 if (_buffTimesCnt >= _buffTimeFILTER) // filter queries to slow down queries to swmc
1671 {
1672 _buffTimesCnt = 0;
1673 vector<std::string> results = _socketClient.GetVector("GetBufferTimes", false); // get buffer status
1674
1675 if (results.size() < 3)
1676 {
1677 return PVR_ERROR_SERVER_ERROR;
1678 }
1679
1680 strTimes->startTime = atoll(results[0].c_str()); // get time_t utc of when stream was started
1681 strTimes->ptsStart = 0; // relative to the above time, time when the stream starts (?)
1682 strTimes->ptsBegin = 0; // how far back the buffer data goes, which is always stream start for swmc
1683 strTimes->ptsEnd = atoll(results[1].c_str()) * DVD_TIME_BASE; // get the current length of the live buffer or recording duration (uSec)
1684 _savBuffStart = strTimes->startTime; // save values last found to filter queries
1685 _savBuffEnd = strTimes->ptsEnd;
1686 _buffTimeFILTER = atol(results[2].c_str()); // get filter value from swmc
1687 }
1688 else
1689 {
1690 // if filtering, used saved values
1691 strTimes->startTime = _savBuffStart;
1692 strTimes->ptsStart = 0;
1693 strTimes->ptsBegin = 0;
1694 strTimes->ptsEnd = _savBuffEnd;
1695 _buffTimesCnt++; // increment how many times saved values were used
1696 }
1697 return PVR_ERROR_NO_ERROR;
1698 }
1699 return PVR_ERROR_SERVER_ERROR;
1700 }
1701
1702 PVR_ERROR Pvr2Wmc::GetRecordingEdl(const PVR_RECORDING &recording, PVR_EDL_ENTRY entries[], int *size)
1703 {
1704
1705 if (_streamFileName != "") // read the edl for the current stream file
1706 {
1707 // see if edl file for currently streaming recording exists
1708 std::string theEdlFile = _streamFileName;
1709 // swap .wtv extension for .edl
1710 std::string::size_type result = theEdlFile.find_last_of('.');
1711 if (std::string::npos != result)
1712 theEdlFile.erase(result);
1713 else
1714 {
1715 XBMC->Log(LOG_DEBUG, "File extender error: '%s'", theEdlFile.c_str());
1716 return PVR_ERROR_FAILED;
1717 }
1718 theEdlFile.append(".edl");
1719
1720 XBMC->Log(LOG_DEBUG, "Opening EDL file: '%s'", theEdlFile.c_str());
1721
1722 void* fileHandle = XBMC->OpenFile(theEdlFile.c_str(), 0);
1723 if (fileHandle)
1724 {
1725 int index = 0;
1726 char buffer[256];
1727 while (XBMC->ReadFileString(fileHandle, buffer, 1024))
1728 {
1729 std::string svals(buffer);
1730 svals = StringUtils::TrimRight(svals, "\r"); // trim windows /r if its there
1731 vector<std::string> vals = split(svals, "\t"); // split on tabs
1732 if (vals.size() == 3)
1733 {
1734 PVR_EDL_ENTRY entry;
1735 entry.start = std::strtod(vals[0].c_str(), null) * 1000; // convert s to ms
1736 entry.end = std::strtod(vals[1].c_str(), null) * 1000;
1737 entry.type = (PVR_EDL_TYPE)atoi(vals[2].c_str());
1738 entries[index] = entry;
1739 index++;
1740 }
1741 }
1742 if (index > 0)
1743 XBMC->Log(LOG_DEBUG, "EDL data found.");
1744 else
1745 XBMC->Log(LOG_DEBUG, "No EDL data found.");
1746 *size = index;
1747 XBMC->CloseFile(fileHandle);
1748 return PVR_ERROR_NO_ERROR;
1749 }
1750 else
1751 XBMC->Log(LOG_DEBUG, "No EDL file found.");
1752
1753 }
1754 return PVR_ERROR_FAILED;
1755 }
1919 #pragma once
2020
2121 #include <vector>
22 #include "p8-platform/util/StdString.h"
2322 #include "client.h"
2423 #include "Socket.h"
2524
128127
129128 // time shifting
130129 bool IsTimeShifting();
131 time_t GetPlayingTime();
132 time_t GetBufferTimeStart();
133 time_t GetBufferTimeEnd();
130 PVR_ERROR GetStreamTimes(PVR_STREAM_TIMES*);
131
132 // comm skip
133 PVR_ERROR GetRecordingEdl(const PVR_RECORDING&, PVR_EDL_ENTRY[], int*);
134134
135135 bool CheckErrorOnServer();
136 void TriggerUpdates(std::vector<CStdString> results);
137 void ExtractDriveSpace(std::vector<CStdString> results);
136 void TriggerUpdates(std::vector<std::string> results);
137 void ExtractDriveSpace(std::vector<std::string> results);
138138
139139 private:
140140 int _serverBuild;
141 CStdString Timer2String(const PVR_TIMER &xTmr);
142 CStdString SeriesTimer2String(const PVR_TIMER &xTmr);
143 CStdString Channel2String(const PVR_CHANNEL &xTmr);
141 std::string Timer2String(const PVR_TIMER &xTmr);
142 std::string SeriesTimer2String(const PVR_TIMER &xTmr);
143 std::string Channel2String(const PVR_CHANNEL &xTmr);
144144
145145 Socket _socketClient;
146146
151151 bool _discardSignalStatus; // flag to discard signal status for channels where the backend had an error
152152
153153 void* _streamFile; // handle to a streamed file
154 CStdString _streamFileName; // the name of the stream file
154 std::string _streamFileName; // the name of the stream file
155155 bool _lostStream; // set to true if stream is lost
156156
157157 bool _streamWTV; // if true, stream wtv files
163163 long long _initialStreamPosition; // used to set an initial position (multiple clients watching the same live tv buffer)
164164
165165 bool _insertDurationHeader; // if true, insert a duration header for active Rec TS file
166 CStdString _durationHeader; // the header to insert (received from server)
166 std::string _durationHeader; // the header to insert (received from server)
167167
168168 int _defaultPriority;
169169 int _defaultLiftetime;
1717 *
1818 */
1919
20 #include "p8-platform/util/StdString.h"
2120 #include "util/XMLUtils.h"
2221 #include "utilities.h"
2322
2524 #include <string>
2625 #include <stdio.h>
2726 #include <cstdarg>
28 #ifdef TARGET_WINDOWS
29 #include <windows.h>
30 #else
31 #include <stdarg.h>
32 #endif
3327
3428 using namespace ADDON;
3529
3630 // format related string functions taken from:
3731 // http://www.flipcode.com/archives/Safe_sprintf.shtml
3832
39 bool Str2Bool(const CStdString str)
33 bool Str2Bool(const std::string& str)
4034 {
4135 return str.compare("True") == 0 ? true:false;
4236 }
4337
44 std::vector<CStdString> split(const CStdString& s, const CStdString& delim, const bool keep_empty) {
45 std::vector<CStdString> result;
46 if (delim.empty()) {
47 result.push_back(s);
48 return result;
49 }
50 CStdString::const_iterator substart = s.begin(), subend;
51 while (true) {
52 subend = search(substart, s.end(), delim.begin(), delim.end());
53 CStdString temp(substart, subend);
54 if (keep_empty || !temp.empty()) {
55 result.push_back(temp);
56 }
57 if (subend == s.end()) {
58 break;
59 }
60 substart = subend + delim.size();
61 }
62 return result;
63 }
64
65 bool EndsWith(CStdString const &fullString, CStdString const &ending)
38 bool EndsWith(std::string const &fullString, std::string const &ending)
6639 {
6740 if (fullString.length() >= ending.length()) {
6841 return (0 == fullString.compare (fullString.length() - ending.length(), ending.length(), ending));
7144 }
7245 }
7346
74 bool StartsWith(CStdString const &fullString, CStdString const &starting)
47 bool StartsWith(std::string const &fullString, std::string const &starting)
7548 {
7649 if (fullString.length() >= starting.length()) {
7750 return (0 == fullString.compare(0, starting.length(), starting));
8154 }
8255
8356 // return the directory from the input file path
84 CStdString GetDirectoryPath(CStdString const &path)
57 std::string GetDirectoryPath(std::string const &path)
8558 {
8659 size_t found = path.find_last_of("/\\");
87 if (found != CStdString::npos)
60 if (found != std::string::npos)
8861 return path.substr(0, found);
8962 else
9063 return path;
9164 }
9265
93 bool ReadFileContents(CStdString const &strFileName, CStdString &strContent)
66 bool ReadFileContents(std::string const &strFileName, std::string &strContent)
9467 {
9568 void* fileHandle = XBMC->OpenFile(strFileName.c_str(), 0);
9669 if (fileHandle)
10477 return false;
10578 }
10679
107 bool WriteFileContents(CStdString const &strFileName, CStdString &strContent)
80 bool WriteFileContents(std::string const &strFileName, std::string &strContent)
10881 {
10982 void* fileHandle = XBMC->OpenFileForWrite(strFileName.c_str(), true);
11083 if (fileHandle)
12295 return rc >= 0;
12396 }
12497 return false;
125 }
98 }
2020
2121 #include <vector>
2222 #include <string>
23 #include "stdio.h"
2324
25 //std::vector<std::string> split(const std::string& s, const std::string& delim);
2426
25 std::vector<CStdString> split(const CStdString& s, const CStdString& delim, const bool keep_empty = true);
27 bool Str2Bool(const std::string& str);
2628
27 bool Str2Bool(const CStdString str);
29 bool EndsWith(std::string const &fullString, std::string const &ending);
30 bool StartsWith(std::string const &fullString, std::string const &starting);
31 std::string GetDirectoryPath(std::string const &path);
32 bool ReadFileContents(std::string const &strFileName, std::string &strResult);
33 bool WriteFileContents(std::string const &strFileName, std::string &strContent);
2834
29 bool EndsWith(CStdString const &fullString, CStdString const &ending);
30 bool StartsWith(CStdString const &fullString, CStdString const &starting);
31 CStdString GetDirectoryPath(CStdString const &path);
32 bool ReadFileContents(CStdString const &strFileName, CStdString &strResult);
33 bool WriteFileContents(CStdString const &strFileName, CStdString &strContent);