Logo Hardware.com.br
Roney rogerio
Roney rogeri... Membro Senior Registrado
315 Mensagens 4 Curtidas

Compilando xbmc para windows

#1 Por Roney rogeri... 23/03/2014 - 23:59
Bom, o que estou tentando fazer é colocar alguns plugins e tema no xbmc e criar um instalador, isso eu já consegui fazer sem o código fonte, criando um instalador com os arquivos que o próprio programa instalou em meu computador, mas sempre dava erro de dll em outros computadores, então quero fazer algo mais profissional, o xbmc me parece que é código aberto, estou tentando baixar e criar o instalador só para ver como funciona antes de começar a fuçar e tentar colocar os plugins, mas não estou conseguindo nem compilar (não sei se esse é o termo correto), sei um pouco de php, nunca mexi com c++, a pagina com o manual para compilar é essa http://wiki.xbmc.org/index.php?title=HOW-TO:Compile_for_Windows , me digam se estou certo, isso seria para eu baixar o código fonte, editar o que eu quiser e depois criar um instalador, estou certo? acho que sim se não gastei 5 horas da minha vida atoa dance.gif kkkkkk, vou falar tudo o que estou fazendo e os erros que eu vejo aparecer

1- Uso windows 7, instalei todos os programas que eles falam que é necessário, mudei o tal "PATH environment variable" do java para C:\Windows\System32

2- fiz os passos 2.1 e o 2.2 o que me retorno os mesmos arquivos
então considerei apenas o 2.2
Imagem
esses são os arquivos queme parece ser os mesmos do passo 2.1
Imagem
depois disso abri o Microsoft visual c++, e abri o projeto que no meu caso esta na pasta C:\xbmc\project\VS2010Express\XBMC for Windows.sln apareceu em uma coluna do lado isso
Imagem
em cima tem um botãozinho verde de debug, clico nele
Imagem
depois aparece isso na tela e eu clico em yes, não sei pra que serve
Imagem
ai em uma janela output tem isso
------ Build started: Project: XbmcCommons, Configuration: Debug Win32 ------
Exception.cpp
ilog.cpp
Generating Code...
XbmcCommons.vcxproj -> C:\xbmc\project\VS2010Express\libs\XbmcCommons\Debug\XbmcCommonsd.lib
------ Skipped Build: Project: gtest, Configuration: Debug Win32 ------
Project not selected to build for this solution configuration
------ Build started: Project: XbmcThreads, Configuration: Debug Win32 ------
Atomics.cpp
Event.cpp
LockFree.cpp
Timer.cpp
Implementation.cpp
Win32Exception.cpp
c:\xbmc\xbmc\settings/lib/Setting.h(27): fatal error C1083: Cannot open include file: 'boost/shared_ptr.hpp': No such file or directory
SystemClock.cpp
Thread.cpp
Generating Code...
------ Build started: Project: UnrarXLib, Configuration: Debug (DirectX) Win32 ------
rar.cpp
C:\xbmc\xbmc\utils/GlobalsHandling.h(23): fatal error C1083: Cannot open include file: 'boost/shared_ptr.hpp': No such file or directory
------ Build started: Project: libPlatinum, Configuration: Debug Win32 ------
NptHash.cpp
NptPosixEnvironment.cpp
NptPosixTime.cpp
PltAction.cpp
PltArgument.cpp
PltConstants.cpp
PltCtrlPoint.cpp
PltCtrlPointTask.cpp
PltDatagramStream.cpp
PltDeviceData.cpp
PltDeviceHost.cpp
..\..\lib\libUPnP\Platinum\Source\Core\PltDeviceHost.cpp(628): warning C4244: 'initializing' : conversion from 'double' to 'NPT_Int32', possible loss of data
..\..\lib\libUPnP\Platinum\Source\Core\PltDeviceHost.cpp(651): warning C4244: 'initializing' : conversion from 'double' to 'NPT_Int32', possible loss of data
PltEvent.cpp
PltHttp.cpp
PltHttpClientTask.cpp
PltHttpServer.cpp
PltHttpServerTask.cpp
PltIconsData.cpp
PltMimeType.cpp
PltProtocolInfo.cpp
PltService.cpp
Generating Code...
Compiling...
PltSsdp.cpp
PltStateVariable.cpp
PltTaskManager.cpp
PltThreadTask.cpp
PltUPnP.cpp
ConnectionManagerSCPD.cpp
ContentDirectorySCPD.cpp
ContentDirectorywSearchSCPD.cpp
PltDidl.cpp
PltFileMediaServer.cpp
PltMediaBrowser.cpp
PltMediaCache.cpp
PltMediaItem.cpp
PltMediaServer.cpp
PltSyncMediaBrowser.cpp
AVTransportSCPD.cpp
PltMediaController.cpp
PltMediaRenderer.cpp
RdrConnectionManagerSCPD.cpp
RenderingControlSCPD.cpp
Generating Code...
Compiling...
PltMediaConnect.cpp
X_MS_MediaReceiverRegistrarSCPD.cpp
Neptune.cpp
NptBase64.cpp
NptBufferedStreams.cpp
NptCommon.cpp
NptConsole.cpp
NptDataBuffer.cpp
NptDebug.cpp
NptDynamicLibraries.cpp
NptFile.cpp
NptHttp.cpp
NptList.cpp
NptLogging.cpp
NptMessaging.cpp
NptNetwork.cpp
NptQueue.cpp
NptResults.cpp
NptRingBuffer.cpp
NptSimpleMessageQueue.cpp
Generating Code...
Compiling...
NptSockets.cpp
NptStreams.cpp
NptStrings.cpp
NptSystem.cpp
NptThreads.cpp
NptTime.cpp
NptTls.cpp
NptUri.cpp
NptUtils.cpp
NptXml.cpp
NptZip.cpp
NptBsdSockets.cpp
NptStdcEnvironment.cpp
NptStdcFile.cpp
NptWin32Debug.cpp
NptWin32DynamicLibraries.cpp
NptWin32File.cpp
NptWin32MessageQueue.cpp
NptWin32Network.cpp
NptWin32Queue.cpp
Generating Code...
Compiling...
NptWin32System.cpp
NptWin32Threads.cpp
Generating Code...
libPlatinum.vcxproj -> C:\xbmc\project\VS2010Express\libs\libPlatinum\Debug\libPlatinumd.lib
------ Build started: Project: libhts, Configuration: Debug Win32 ------
htsatomic.c
htsbuf.c
htsmsg.c
htsmsg_binary.c
htsstr.c
net_winsock.c
sha1.c
Generating Code...
libhts_2010.vcxproj -> C:\xbmc\project\VS2010Express\libs\libhts\Debug\libhts.lib
------ Build started: Project: libXDAAP, Configuration: Debug Win32 ------
daap.c
debug.c
dmap_generics.c
global.c
hasher.c
httpClient.c
libXDAAP.c
..\libXDAAP.c(1322): warning C4101: 'assert' : unreferenced local variable
md5.c
Generating Code...
libXDAAP_win32.vcxproj -> C:\xbmc\project\VS2010Express\libs\libXDAAP\Debug\libXDAAPd.lib
------ Build started: Project: libRTV, Configuration: Debug Win32 ------
crypt.c
guideclient.c
httpclient.c
httpfsclient.c
interface.c
interface.c(135): warning C4244: 'function' : conversion from 'double' to 'size_t', possible loss of data
md5.c
netclient.c
rtv.c
sleep.c
Generating Code...
GuideParser.cpp
libRTV.vcxproj -> C:\xbmc\project\VS2010Express\libs\libRTV\Debug\libRTV_win32.lib
------ Build started: Project: squish, Configuration: Debug Win32 ------
alpha.cpp
clusterfit.cpp
colourblock.cpp
colourfit.cpp
colourset.cpp
maths.cpp
rangefit.cpp
singlecolourfit.cpp
squish.cpp
Generating Code...
squish_2010.vcxproj -> C:\xbmc\project\VS2010Express\libs\squish\Debug\squishd.lib
------ Build started: Project: XBMC, Configuration: Debug (DirectX) Win32 ------
Generating SWIG bindings
O sistema não pode encontrar o caminho especificado.
[C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmc.xml, C:\xbmc\xbmc\interfaces\python\PythonSwig.cpp.template, C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmc.cpp, C:\xbmc\xbmc\interfaces\python\generated\doxygenxml]
Caught: java.lang.AssertionError: Cannot locate the spec file "C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmc.xml.". Expression: (moduleSpec.exists() && moduleSpec.isFile())
java.lang.AssertionError: Cannot locate the spec file "C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmc.xml.". Expression: (moduleSpec.exists() && moduleSpec.isFile())
at Generator.run(Generator.groovy:55)
Não foi possível encontrar C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmc.xml
Generating SWIG bindings
O sistema não pode encontrar o caminho especificado.
[C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcaddon.xml, C:\xbmc\xbmc\interfaces\python\PythonSwig.cpp.template, C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcaddon.cpp, C:\xbmc\xbmc\interfaces\python\generated\doxygenxml]
Caught: java.lang.AssertionError: Cannot locate the spec file "C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcaddon.xml.". Expression: (moduleSpec.exists() && moduleSpec.isFile())
java.lang.AssertionError: Cannot locate the spec file "C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcaddon.xml.". Expression: (moduleSpec.exists() && moduleSpec.isFile())
at Generator.run(Generator.groovy:55)
Não foi possível encontrar C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcaddon.xml
Generating SWIG bindings
O sistema não pode encontrar o caminho especificado.
[C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcgui.xml, C:\xbmc\xbmc\interfaces\python\PythonSwig.cpp.template, C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcgui.cpp, C:\xbmc\xbmc\interfaces\python\generated\doxygenxml]
Caught: java.lang.AssertionError: Cannot locate the spec file "C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcgui.xml.". Expression: (moduleSpec.exists() && moduleSpec.isFile())
java.lang.AssertionError: Cannot locate the spec file "C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcgui.xml.". Expression: (moduleSpec.exists() && moduleSpec.isFile())
at Generator.run(Generator.groovy:55)
Não foi possível encontrar C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcgui.xml
Generating SWIG bindings
O sistema não pode encontrar o caminho especificado.
[C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcplugin.xml, C:\xbmc\xbmc\interfaces\python\PythonSwig.cpp.template, C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcplugin.cpp, C:\xbmc\xbmc\interfaces\python\generated\doxygenxml]
Caught: java.lang.AssertionError: Cannot locate the spec file "C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcplugin.xml.". Expression: (moduleSpec.exists() && moduleSpec.isFile())
java.lang.AssertionError: Cannot locate the spec file "C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcplugin.xml.". Expression: (moduleSpec.exists() && moduleSpec.isFile())
at Generator.run(Generator.groovy:55)
Não foi possível encontrar C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcplugin.xml
Generating SWIG bindings
O sistema não pode encontrar o caminho especificado.
[C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcvfs.xml, C:\xbmc\xbmc\interfaces\python\PythonSwig.cpp.template, C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcvfs.cpp, C:\xbmc\xbmc\interfaces\python\generated\doxygenxml]
Caught: java.lang.AssertionError: Cannot locate the spec file "C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcvfs.xml.". Expression: (moduleSpec.exists() && moduleSpec.isFile())
java.lang.AssertionError: Cannot locate the spec file "C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcvfs.xml.". Expression: (moduleSpec.exists() && moduleSpec.isFile())
at Generator.run(Generator.groovy:55)
Não foi possível encontrar C:\xbmc\xbmc\interfaces\python\generated\AddonModuleXbmcvfs.xml
pch.cpp
c:\xbmc\xbmc\win32\pch.h(44): fatal error C1083: Cannot open include file: 'boost/shared_ptr.hpp': No such file or directory
========== Build: 6 succeeded, 3 failed, 0 up-to-date, 1 skipped ==========

depois aparece isso
Imagem
eu clico em yes e aparece isso
Imagem

bom é isso, não faço a mínima ideia de como compilar dance.gif !!!!!!!!!!!!!!!
Roney rogerio
Roney rogeri... Membro Senior Registrado
315 Mensagens 4 Curtidas
#17 Por Roney rogeri...
26/03/2014 - 10:38
Henry-Keys disse:
Ei! Mande algumas screenshots, também quero comemorar kkkk Imagem.
Parabéns aí parceiro.

fica tranquilo você ainda vai ser útil, kkkkk, agora estou com outro problema, a tal versão do git e muito nova, meu plugin e tema que tenho não e compatível, e não tem atualização para eles, na versão XMBC 12.2 Git:20130502-32b1a5e funciona perfeitamente, só que não tenho essa versão e nem sei se tem como baixar uma versão antiga no git, estou baixando do git em um botão em cima "branch" a verção "frodo" que me parece ser a versão estável mas se não for compatível também vou ter que dar um geito de arrumar a versão 12.2
Henry-Keys
Henry-Keys Geek Registrado
1.8K Mensagens 235 Curtidas
#21 Por Henry-Keys
26/03/2014 - 15:33
Não vi erro nenhum na compilação, o script só reclamou do diretório do código-fonte que não é um repositório git válido.

Retrieving the git revision
fatal: Not a git repository (or any of the parent directories): .git
unknown
Baixe corretamente o código-fonte, com o comando git clone ou com o TortoiseGit

E ainda reclamou de um ficheiro:

FC: não é possível abrir ..\..\XBMC\WIN32\GIT_REV.H - O arquivo ou a pasta não existe


Abraços.
Henry-Keys
Henry-Keys Geek Registrado
1.8K Mensagens 235 Curtidas
#23 Por Henry-Keys
26/03/2014 - 15:52
Roney rogerio disse:
como eu copio essa versão, qual o comando?


Pra dizer a verdade, pode até ser um repositório válido, então cheque se este ficheiro existe no diretório do código-fonte:

FC: não é possível abrir ..\..\XBMC\WIN32\GIT_REV.H - O arquivo ou a pasta não existe


Se não estiver lá, copie esse ficheiro do código mais recente para o antigo.
Ou baixe um script para o código mais antigo.

Abraços.
Roney rogerio
Roney rogeri... Membro Senior Registrado
315 Mensagens 4 Curtidas
#24 Por Roney rogeri...
26/03/2014 - 15:59
Henry-Keys disse:
Pra dizer a verdade, pode até ser um repositório válido, então cheque se este ficheiro existe no diretório do código-fonte:

FC: não é possível abrir ..\..\XBMC\WIN32\GIT_REV.H - O arquivo ou a pasta não existe
Se não estiver lá, copie esse ficheiro do código mais recente para o antigo.
Ou baixe um script para o código mais antigo.

Abraços.

Imagem
Roney rogerio
Roney rogeri... Membro Senior Registrado
315 Mensagens 4 Curtidas
#26 Por Roney rogeri...
26/03/2014 - 20:26
olha isso embaixo, agora vou testar

Welcome to Git (version 1.9.0-preview20140217)


Run 'git help git' to display the help index.
Run 'git help <command>' to display help for specific commands.

Roney@RONEY-PC ~
$ cd xbmcd

Roney@RONEY-PC ~/xbmcd (master)
$ git tag -l
10.0-Dharma
10.1-Dharma
11.0-Eden
11.0-Eden-ATV2-iOS5
11.0-Eden-r2
12.0-Frodo
12.0-Frodo-ATV2-IOS6
12.1-Frodo
12.2-Frodo
12.3-Frodo
Dharma_beta1
Dharma_beta2
Dharma_beta3
Dharma_beta4
Dharma_rc1
Dharma_rc2
Eden_beta1
Eden_beta2
Eden_beta3
Eden_beta3.1
Eden_rc1
Eden_rc2
Frodo_alpha1
Frodo_alpha2
Frodo_alpha3
Frodo_alpha4
Frodo_alpha5
Frodo_alpha6
Frodo_alpha7
Frodo_beta1
Frodo_beta2
Frodo_beta3
Frodo_rc1
Frodo_rc2
Frodo_rc3
Gotham-beta1
Gotham_alpha1
Gotham_alpha10
Gotham_alpha11
Gotham_alpha2
Gotham_alpha3
Gotham_alpha4
Gotham_alpha5
Gotham_alpha6
Gotham_alpha7
Gotham_alpha8
Gotham_alpha9
Gotham_beta2

Roney@RONEY-PC ~/xbmcd (master)
$ checkout tags/12.2-Frodo
sh.exe": checkout: command not found

Roney@RONEY-PC ~/xbmcd (master)
$ git checkout tags/12.2-Frodo
Checking out files: 100% (9676/9676), done.
Note: checking out 'tags/12.2-Frodo'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

HEAD is now at 32b1a5e... bump version to 12.2

Roney@RONEY-PC ~/xbmcd ((12.2-Frodo))
$

Editado:
o log foi esse no link abaixo, deu erro ainda, e agora tenho certeza que foi feito da forma correta, baixei com o comando git clone e depois escolhi a versão da forma que esta ali em cima
http://pastebin.com/2jEhu4A6
Roney rogerio
Roney rogeri... Membro Senior Registrado
315 Mensagens 4 Curtidas
#28 Por Roney rogeri...
27/03/2014 - 10:15
1 problema eu acho que eu descobri, é o .net framework , o windows atualizo denovo pra o 4.5, desinstalei e coloquei o 4.0 denevo agora esta assim

:
:::
::::
::::
::::::: ::::::::::::::::: :::::: :::::: :::::::
::::::::: :::::::::::::::::::: :::::::::: :::::::::: :::::::::
::::::::: :::::::::::::::::::::: :::::::::::::::::::::::: :::::::::
::::::::: ::: ::::: ::::: :::::::: :::: :::::
:::::: :::: :::: :::: ::::: :::::::
::::: :::: ::::::: ::::: ::::::
::::: ::: :::::: ::: ::::::
:::: ::: :::::: :::: ::::::
:::: ::: ::::::: :::: ::::::
::::: :::: ::::::: :::: ::::::
::::::: :::: :::::::: ::: :::::::
::::::::::::::: ::::: ::::: ::: ::: :::::::::
::::::::: ::::::::: ::::::::::: ::: ::: ::: :::::::::
:::::::: ::::::::: ::::::::: ::: ::: ::: ::::::::
:::::: ::::::: ::::: : :: :: ::::::
Wait while preparing the build.
------------------------------------------------------------
Cleaning Solution...
Compiling XBMC...
Done!
------------------------------------------------------------
Compiling mingw libs
O sistema não pode encontrar o caminho especificado.
------------------------------------------------------------
!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-
ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR ERROR
!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-
ERROR: "failed to build mingw libs"
------------------------------------------------------------
View the build log in your HTML browser? [y/n]
o log é esse http://pastebin.com/Lw6aRri3
estou compilando pela pasta Win32BuildSetup
achoq ue tem que colocar no PATH o mingw
Roney rogerio
Roney rogeri... Membro Senior Registrado
315 Mensagens 4 Curtidas
#30 Por Roney rogeri...
27/03/2014 - 15:42
já consegui
C:\Program Files\Java\jdk1.8.0\bin;C:\Program Files\Git\bin;C:\Program Files\Microsoft Visual Studio 10.0\VC\bin
agora to querendo embutir o plugin, acho que é em Python, isso seria fácil só jogar na pasta addon, mas.... eu também quero pré configurar o plugin, o arquivo de configuração fica em
C:\Users\Roney\AppData\Roaming\XBMC\userdata\addon_data\plugin.video.live.streams\source_file
dentro desse source_file tem isso
[["Canais_Livres", "Canais_Livres.xml"]]
o plugin é esse

# -*- coding: utf-8 -*-

import urllib
import urllib2
import datetime
import re
import os
import xbmcplugin
import xbmcgui
import xbmcaddon
import xbmcvfs
from BeautifulSoup import BeautifulStoneSoup, BeautifulSoup, BeautifulSOAP
try:
import json
except:
import simplejson as json

addon = xbmcaddon.Addon('plugin.video.live.streams')
profile = addon.getAddonInfo('profile').decode('utf-8')
home = addon.getAddonInfo('path').decode('utf-8')
favorites = xbmc.translatePath(os.path.join(profile, 'favorites' )).decode('utf-8')
REV = xbmc.translatePath(os.path.join(profile, 'list_revision')).decode('utf-8')
icon = xbmc.translatePath(os.path.join(home, 'icon.png'))
fanart = xbmc.translatePath(os.path.join(home, 'fanart.jpg'))
source_file = xbmc.translatePath(os.path.join(profile, 'source_file')).decode('utf-8')
update_time = xbmc.translatePath(os.path.join(profile, 'update_time')).decode('utf-8')
if os.path.exists(favorites)==True:
FAV = open(favorites).read()
if os.path.exists(source_file)==True:
SOURCES = open(source_file).read()

def makeRequest(url):
try:
req = urllib2.Request(url)
response = urllib2.urlopen(req)
data = response.read()
response.close()
return data
except urllib2.URLError, e:
if hasattr(e, 'code'):
print 'We failed with error code - %s.' % e.code
xbmc.executebuiltin("XBMC.Notification(LiveStreams,We failed with error code - "+str(e.code)+",10000,"+icon+&quot&quot
elif hasattr(e, 'reason'):
print 'We failed to reach a server.'
print 'Reason: ', e.reason
xbmc.executebuiltin("XBMC.Notification(LiveStreams,We failed to reach a server. - "+str(e.reason)+",10000,"+icon+&quot&quot

def getSources():
if os.path.exists(favorites)==True:
addDir('Favorites','url',4,xbmc.translatePath(os.path.join(home, 'resources', 'favorite.png')),fanart,'','','',False)
if os.path.exists(source_file)==False:
xbmc.executebuiltin("XBMC.Notification(LiveStreams,Choose type source and then select Add Source.,15000,"+icon+&quot&quot
addon.openSettings()
return
sources = json.loads(open(source_file,"r&quot.read())
if len(sources) > 1:
for i in sources:
addDir(i[0],i[1].encode('utf-8'),1,icon,fanart,'','','')
else:
getData(sources[0][1],fanart)


def addSource(url=None):
if url is None:
if not addon.getSetting("new_file_source&quot == "":
source = addon.getSetting('new_file_source').decode('utf-8')
if not addon.getSetting("new_url_source&quot == "":
source = addon.getSetting('new_url_source')
else:
source = url
print 'NEW SOURCE: '+source.encode('utf-8')
if source == '' or source is None:
return
if '/' in source:
nameStr = source.split('/')[-1].split('.')[0]
if '\\' in source:
nameStr = source.split('\\')[-1].split('.')[0]
if '%' in nameStr:
nameStr = urllib.unquote_plus(nameStr)
keyboard = xbmc.Keyboard(nameStr,'Displayed Name, Rename?')
keyboard.doModal()
if (keyboard.isConfirmed() == False):
return
newStr = keyboard.getText()
if len(newStr) == 0:
return
source_list = []
source = (newStr, source)
if os.path.exists(source_file)==False:
source_list.append(source)
b = open(source_file,"w&quot
b.write(json.dumps(source_list))
b.close()
else:
sources = json.loads(open(source_file,"r&quot.read())
sources.append(source)
b = open(source_file,"w&quot
b.write(json.dumps(sources))
b.close()
addon.setSetting('new_url_source', "&quot
addon.setSetting('new_file_source', "&quot
xbmc.executebuiltin("XBMC.Notification(LiveStreams,New source added.,5000,"+icon+&quot&quot


def rmSource(name):
sources = json.loads(open(source_file,"r&quot.read())
for index in range(len(sources)):
if sources[index][0] == name:
del sources[index]
b = open(source_file,"w&quot
b.write(json.dumps(sources))
b.close()
return


def getCommunitySources():
url = 'http://community-links.googlecode.com/svn/trunk/'
soup = BeautifulSoup(makeRequest(url), convertEntities=BeautifulSoup.HTML_ENTITIES)
files = soup('ul')[0]('li')[1:]
for i in files:
name = i('a')[0]['href']
url = 'http://community-links.googlecode.com/svn/trunk/'+name
addDir(name,url,11,icon,fanart,'','','',False)


def checkForUpdate():
url = 'http://community-links.googlecode.com/svn/trunk/'
data = makeRequest(url)
revision = re.compile('<html>').findall(data)[0]
if xbmcvfs.exists(REV):
R = open(REV,"r&quot
rev = R.read()
R.close()
revision_check = re.compile('<html>').findall(rev)[0]
print 'GoogleCode Revision: '+revision
print 'Current Revision: '+revision_check
if revision_check == revision:
u = open(update_time, "w&quot
u.write(str(datetime.datetime.now()))
u.close()
print 'Update Time: '+ str(datetime.datetime.now())
return
else:
getUpdate(data)


def getUpdate(data=None):
if data is None:
url = 'http://community-links.googlecode.com/svn/trunk/'
data = makeRequest(url)
soup = BeautifulSoup(data, convertEntities=BeautifulSoup.HTML_ENTITIES)
files = soup('ul')[0]('li')[1:]
try:
R = open(REV,"w&quot
R.write(data)
R.close()
except:
print "there was a problem writing REV to profile."
for i in files:
name = i('a')[0]['href']
url = 'http://community-links.googlecode.com/svn/trunk/'+name
link = makeRequest(url)
if not xbmcvfs.exists(addon.getSetting('save_location')):
success = xbmcvfs.mkdir(addon.getSetting('save_location'))
save_location = addon.getSetting('save_location').decode('utf-8')
if 'smb:' in save_location:
file_name = xbmc.makeLegalFilename(os.path.join( profile, 'temp', name))
f = open(os.path.join( profile, 'temp', name),"w&quot
f.write(link)
f.close()
copy = xbmcvfs.copy(os.path.join( profile, 'temp', name), os.path.join( save_location, name))
if copy:
xbmcvfs.delete( xbmc.translatePath(os.path.join( profile, 'temp', name)))
else:
print '------ Error smb: makeLegalFilename -----'
else:
try:
file_name = xbmc.makeLegalFilename(os.path.join(save_location, name))
f = open(os.path.join(save_location, name),"w&quot
f.write(link)
f.close()
except:
print "there was a problem writing to save location."
return
if not xbmcvfs.exists(os.path.join(profile, 'update_time')):
xbmc.makeLegalFilename(os.path.join(profile, 'update_time'))
u = open(update_time, "w&quot
u.write(str(datetime.datetime.now()))
u.close()
print 'Update Time: '+ str(datetime.datetime.now())
xbmc.executebuiltin("XBMC.Notification(LiveStreams,Community Lists Updated,5000,"+icon+&quot&quot


if addon.getSetting('community_list') == "true":
if addon.getSetting('save_location') == "":
xbmc.executebuiltin("XBMC.Notification('LiveStreams','Choose a location to save files and select OK to save.',15000,"+icon+&quot&quot
addon.openSettings()
else:
if xbmcvfs.exists(os.path.join(profile, 'update_time')):
time_string = open(update_time, "r&quot.read()
if str(datetime.datetime.now() - datetime.timedelta(minutes=10)) > time_string:
checkForUpdate()


def getSoup(url):
if url.startswith('http://'):
data = makeRequest(url)
else:
if xbmcvfs.exists(url):
if url.startswith("smb://&quot:
copy = xbmcvfs.copy( url, xbmc.translatePath(os.path.join(profile, 'temp', 'sorce_temp.txt')))
if copy:
data = open( xbmc.translatePath(os.path.join(profile, 'temp', 'sorce_temp.txt')), "r&quot.read()
xbmcvfs.delete( xbmc.translatePath(os.path.join(profile, 'temp', 'sorce_temp.txt')) )
else:
print "--- failed to copy from smb: ----"
else:
data = open(url, 'r').read()
else:
print "---- Soup Data not found! ----"
return
soup = BeautifulSOAP(data, convertEntities=BeautifulStoneSoup.XML_ENTITIES)
return soup


def getData(url,fanart):
soup = getSoup(url)
if len(soup('channels')) > 0:
channels = soup('channel')
for channel in channels:
name = channel('name')[0].string
thumbnail = channel('thumbnail')[0].string
if thumbnail == None:
thumbnail = ''

try:
if not channel('fanart'):
if addon.getSetting('use_thumb') == "true":
fanArt = thumbnail
else:
fanArt = fanart
else:
fanArt = channel('fanart')[0].string
if fanArt == None:
raise
except:
fanArt = fanart

try:
desc = channel('info')[0].string
if desc == None:
raise
except:
desc = ''

try:
genre = channel('genre')[0].string
if genre == None:
raise
except:
genre = ''

try:
date = channel('date')[0].string
if date == None:
raise
except:
date = ''
try:
addDir(name.encode('utf-8', 'ignore'),url.encode('utf-8'),2,thumbnail,fanArt,desc,genre,date)
except:
print 'There was a problem adding directory from getData(): '+name.encode('utf-8', 'ignore')
else:
getItems(soup('item'),fanart)


def getChannelItems(name,url,fanart):
soup = getSoup(url)
channel_list = soup.find('channel', attrs={'name' : name})
items = channel_list('item')
try:
fanArt = channel_list('fanart')[0].string
if fanArt == None:
raise
except:
fanArt = fanart
for channel in channel_list('subchannel'):
name = channel('name')[0].string
try:
thumbnail = channel('thumbnail')[0].string
if thumbnail == None:
raise
except:
thumbnail = ''
try:
if not channel('fanart'):
if addon.getSetting('use_thumb') == "true":
fanArt = thumbnail
else:
fanArt = channel('fanart')[0].string
if fanArt == None:
raise
except:
pass
try:
desc = channel('info')[0].string
if desc == None:
raise
except:
desc = ''

try:
genre = channel('genre')[0].string
if genre == None:
raise
except:
genre = ''

try:
date = channel('date')[0].string
if date == None:
raise
except:
date = ''
try:
addDir(name.encode('utf-8', 'ignore'),url.encode('utf-8'),3,thumbnail,fanArt,desc,genre,date)
except:
print 'There was a problem adding directory - '+name.encode('utf-8', 'ignore')
getItems(items,fanArt)


def getSubChannelItems(name,url,fanart):
soup = getSoup(url)
channel_list = soup.find('subchannel', attrs={'name' : name})
items = channel_list('subitem')
getItems(items,fanart)


def getItems(items,fanart):
for item in items:
try:
name = item('title')[0].string
except:
print '-----Name Error----'
name = ''
try:
if item('epg'):
if item('epg')[0].string > 1:
name += getepg(item('epg')[0].string)
else:
pass
except:
print '----- EPG Error ----'

try:
url = []
for i in item('link'):
url.append(i.string)
except:
print '---- URL Error Passing ----'+name
continue

try:
thumbnail = item('thumbnail')[0].string
if thumbnail == None:
raise
except:
thumbnail = ''
try:
if not item('fanart'):
if addon.getSetting('use_thumb') == "true":
fanArt = thumbnail
else:
fanArt = fanart
else:
fanArt = item('fanart')[0].string
if fanArt == None:
raise
except:
fanArt = fanart
try:
desc = item('info')[0].string
if desc == None:
raise
except:
desc = ''

try:
genre = item('genre')[0].string
if genre == None:
raise
except:
genre = ''

try:
date = item('date')[0].string
if date == None:
raise
except:
date = ''
try:
if len(url) > 1:
alt = 0
playlist = []
for i in url:
playlist.append(i)
for i in url:
alt += 1
addLink(i,'%s) %s' %(str(alt), name.encode('utf-8', 'ignore')),thumbnail,fanArt,desc,genre,date,True,playlist)
else:
addLink(url[0],name.encode('utf-8', 'ignore'),thumbnail,fanArt,desc,genre,date,True)
except:
print 'There was a problem adding link - '+name.encode('utf-8', 'ignore')


def get_params():
param=[]
paramstring=sys.argv[2]
if len(paramstring)>=2:
params=sys.argv[2]
cleanedparams=params.replace('?','')
if (params[len(params)-1]=='/'):
params=params[0:len(params)-2]
pairsofparams=cleanedparams.split('&')
param={}
for i in range(len(pairsofparams)):
splitparams={}
splitparams=pairsofparams[i].split('=')
if (len(splitparams))==2:
param[splitparams[0]]=splitparams[1]
return param


def getFavorites():
for i in json.loads(open(favorites).read()):
name = i[0]
url = i[1]
iconimage = i[2]
try:
fanArt = i[3]
if fanArt == None:
raise
except:
if addon.getSetting('use_thumb') == "true":
fanArt = iconimage
else:
fanArt = fanart
addLink(url,name,iconimage,fanArt,'','','')


def addFavorite(name,url,iconimage,fanart):
favList = []
if os.path.exists(favorites)==False:
print 'Making Favorites File'
favList.append((name,url,iconimage,fanart))
a = open(favorites, "w&quot
a.write(json.dumps(favList))
a.close()
else:
print 'Appending Favorites'
a = open(favorites).read()
data = json.loads(a)
data.append((name,url,iconimage,fanart))
b = open(favorites, "w&quot
b.write(json.dumps(data))
b.close()


def rmFavorite(name):
a = open(favorites).read()
data = json.loads(a)
for index in range(len(data)):
if data[index][0]==name:
del data[index]
b = open(favorites, "w&quot
b.write(json.dumps(data))
b.close()
return


def play_playlist(name, list):
playlist = xbmc.PlayList(1)
playlist.clear()
item = 0
for i in list:
item += 1
info = xbmcgui.ListItem('%s) %s' %(str(item),name))
playlist.add(i, info)
xbmc.executebuiltin('playlist.playoffset(video,0)')


def addDir(name,url,mode,iconimage,fanart,description,genre,date,showcontext=True):
u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)+"&fanart="+urllib.quote_plus(fanart)
ok=True
liz=xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage)
liz.setInfo( type="Video", infoLabels={ "Title": name, "Plot": description, "Genre": genre, "Date": date } )
liz.setProperty( "Fanart_Image", fanart )
if showcontext == True:
try:
if name in str(SOURCES):
contextMenu = [('Remove from Sources','XBMC.Container.Update(%s?mode=8&name=%s)' %(sys.argv[0], urllib.quote_plus(name)))]
liz.addContextMenuItems(contextMenu, True)
except:
pass
ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=True)
return ok


def addLink(url,name,iconimage,fanart,description,genre,date,showcontext=True,playlist=None):
u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode=12"
ok=True
liz=xbmcgui.ListItem(name, iconImage="DefaultVideo.png", thumbnailImage=iconimage)
liz.setInfo( type="Video", infoLabels={ "Title": name, "Plot": description, "Genre": genre, "Date": date } )
liz.setProperty( "Fanart_Image", fanart )
liz.setProperty('IsPlayable', 'true')
if showcontext:
try:
if name in FAV:
contextMenu = [('Remove from LiveStreams Favorites','XBMC.Container.Update(%s?mode=6&name=%s)' %(sys.argv[0], urllib.quote_plus(name)))]
else:
contextMenu = [('Add to LiveStreams Favorites','XBMC.Container.Update(%s?mode=5&name=%s&url=%s&iconimage=%s&fanart=%s)' %(sys.argv[0], urllib.quote_plus(name), urllib.quote_plus(url), urllib.quote_plus(iconimage), urllib.quote_plus(fanart)))]
except:
contextMenu = [('Add to LiveStreams Favorites','XBMC.Container.Update(%s?mode=5&name=%s&url=%s&iconimage=%s&fanart=%s)' %(sys.argv[0], urllib.quote_plus(name), urllib.quote_plus(url), urllib.quote_plus(iconimage), urllib.quote_plus(fanart)))]
liz.addContextMenuItems(contextMenu)
if not playlist is None:
playlist_name = name.split(') ')[1]
contextMenu_ = [('Play '+playlist_name+' PlayList','XBMC.RunPlugin(%s?mode=13&name=%s&playlist=%s)' %(sys.argv[0], urllib.quote_plus(playlist_name), urllib.quote_plus(str(playlist).replace(',','|'))))]
liz.addContextMenuItems(contextMenu_)
ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz)
return ok


#eseffair 28/05/2012 - novo epg
def getepg(link):
url=urllib.urlopen(link)
source=url.read()
url.close()
soup = BeautifulSoup(source)
programa1 = soup("li&quot[2].a["title"]
horario1 = soup("li&quot[2].a.div.text
programa2 = soup("li&quot[3].a["title"]
horario2 = soup("li&quot[3].a.div.text
#return " - Agora: "+horario1+" "+programa1+" A seguir: "+horario2+" "+programa2
return ' (%s - "%s" / %s - "%s&quot' % (horario1,programa1,horario2,programa2)


xbmcplugin.setContent(int(sys.argv[1]), 'movies')
try:
xbmcplugin.addSortMethod(int(sys.argv[1]), xbmcplugin.SORT_METHOD_UNSORTED)
except:
pass
try:
xbmcplugin.addSortMethod(int(sys.argv[1]), xbmcplugin.SORT_METHOD_LABEL)
except:
pass
try:
xbmcplugin.addSortMethod(int(sys.argv[1]), xbmcplugin.SORT_METHOD_DATE)
except:
pass
try:
xbmcplugin.addSortMethod(int(sys.argv[1]), xbmcplugin.SORT_METHOD_GENRE)
except:
pass

params=get_params()

url=None
name=None
mode=None
playlist=None

try:
url=urllib.unquote_plus(params["url"]).decode('utf-8')
except:
pass
try:
name=urllib.unquote_plus(params["name"])
except:
pass
try:
iconimage=urllib.unquote_plus(params["iconimage"])
except:
pass
try:
fanart=urllib.unquote_plus(params["fanart"])
except:
pass
try:
mode=int(params["mode"])
except:
pass
try:
playlist=eval(urllib.unquote_plus(params["playlist"]).replace('|',','))
except:
pass

print "Mode: "+str(mode)
if not url is None:
print "URL: "+str(url.encode('utf-8'))
print "Name: "+str(name)

if mode==None:
print "getSources"
getSources()

elif mode==1:
print "getData"
getData(url,fanart)

elif mode==2:
print "getChannelItems"
getChannelItems(name,url,fanart)

elif mode==3:
print ""
getSubChannelItems(name,url,fanart)

elif mode==4:
print ""
getFavorites()

elif mode==5:
print ""
try:
name = name.split('\\ ')[1]
except:
pass
try:
name = name.split(' - ')[0]
except:
pass
addFavorite(name,url,iconimage,fanart)

elif mode==6:
print "rmFavorite"
try:
name = name.split('\\ ')[1]
except:
pass
try:
name = name.split(' - ')[0]
except:
pass
rmFavorite(name)

elif mode==7:
print "addSource"
addSource(url)

elif mode==8:
print "rmSource"
rmSource(name)

elif mode==9:
print "getUpdate"
getUpdate()

elif mode==10:
print "getCommunitySources"
getCommunitySources()

elif mode==11:
print "addSource"
addSource(url)

elif mode==12:
print "setResolvedUrl"
item = xbmcgui.ListItem(path=url)
xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, item)

elif mode==13:
print "play_playlist"
play_playlist(name, playlist)

xbmcplugin.endOfDirectory(int(sys.argv[1]))
nao sei se tem possibilidade mas poderia verificar se o arquivo existe
if not os.path.exists(source_file):
se nao existir criar ele com isso dentro
[["Canais_Livres", "Canais_Livres.xml"]]

mas não sei como fazer
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal