2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

98_DLNARenderer: support

98_DLNARenderer: fix some freezes

git-svn-id: https://svn.fhem.de/fhem/trunk@14051 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
dominikkarall 2017-04-20 22:19:00 +00:00
parent 7aaf06324c
commit fc615606ff
2 changed files with 32 additions and 19 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- feature: 98_DLNARenderer: support $readingFnAttributes
- feature: 34_ESPEasy: urlEncode text for display commands - feature: 34_ESPEasy: urlEncode text for display commands
- feature: 71_PHILIPS_AUDIO: Added NP3500 support. "lvl" Reading bugfix. - feature: 71_PHILIPS_AUDIO: Added NP3500 support. "lvl" Reading bugfix.
- change: 93_DbLog: version 2.16.5 primary key evaluation changed - change: 93_DbLog: version 2.16.5 primary key evaluation changed

View File

@ -2,6 +2,11 @@
# Author: dominik.karall@gmail.com # Author: dominik.karall@gmail.com
# $Id$ # $Id$
# #
# v2.0.4 - 20170421
# - FEATURE: support $readingFnAttributes
# - BUGFIX: fix some freezes
# - BUGFIX: retry UPnP call 3 times if it fails (error 500)
#
# v2.0.3 - 20160918 # v2.0.3 - 20160918
# - BUGFIX: fixed SyncPlay for CaskeId players # - BUGFIX: fixed SyncPlay for CaskeId players
# #
@ -152,6 +157,7 @@ sub DLNARenderer_Initialize($) {
$hash->{ReadFn} = "DLNARenderer_Read"; $hash->{ReadFn} = "DLNARenderer_Read";
$hash->{UndefFn} = "DLNARenderer_Undef"; $hash->{UndefFn} = "DLNARenderer_Undef";
$hash->{AttrFn} = "DLNARenderer_Attribute"; $hash->{AttrFn} = "DLNARenderer_Attribute";
$hash->{AttrList} = $readingFnAttributes;
} }
sub DLNARenderer_Attribute { sub DLNARenderer_Attribute {
@ -178,7 +184,7 @@ sub DLNARenderer_Define($$) {
if(@param < 3) { if(@param < 3) {
#main #main
$hash->{UDN} = 0; $hash->{UDN} = 0;
my $VERSION = "v2.0.3"; my $VERSION = "v2.0.4";
$hash->{VERSION} = $VERSION; $hash->{VERSION} = $VERSION;
Log3 $hash, 3, "DLNARenderer: DLNA Renderer $VERSION"; Log3 $hash, 3, "DLNARenderer: DLNA Renderer $VERSION";
DLNARenderer_setupControlpoint($hash); DLNARenderer_setupControlpoint($hash);
@ -915,7 +921,9 @@ sub DLNARenderer_upnpCall {
my ($hash, $service, $method, @args) = @_; my ($hash, $service, $method, @args) = @_;
my $upnpService = DLNARenderer_upnpGetService($hash, $service); my $upnpService = DLNARenderer_upnpGetService($hash, $service);
my $ret = undef; my $ret = undef;
my $i = 0;
do {
eval { eval {
my $upnpServiceCtrlProxy = $upnpService->controlProxy(); my $upnpServiceCtrlProxy = $upnpService->controlProxy();
my $methodExists = $upnpService->getAction($method); my $methodExists = $upnpService->getAction($method);
@ -929,8 +937,10 @@ sub DLNARenderer_upnpCall {
if($@) { if($@) {
Log3 $hash, 3, "DLNARenderer: $service, $method(".join(",",@args).") failed, $@"; Log3 $hash, 3, "DLNARenderer: $service, $method(".join(",",@args).") failed, $@";
return undef;
} }
$i = $i+1;
} while(!defined($ret) && $i < 3);
return $ret; return $ret;
} }
@ -1320,18 +1330,20 @@ sub DLNARenderer_addedDevice {
readingsSingleUpdate($DLNARendererHash, "presentationURL", $dev->presentationURL(), 1); readingsSingleUpdate($DLNARendererHash, "presentationURL", $dev->presentationURL(), 1);
readingsSingleUpdate($DLNARendererHash, "manufacturer", $dev->manufacturer(), 1); readingsSingleUpdate($DLNARendererHash, "manufacturer", $dev->manufacturer(), 1);
if(!$foundDevice) {
#register callbacks #register callbacks
#urn:upnp-org:serviceId:AVTransport #urn:upnp-org:serviceId:AVTransport
if(DLNARenderer_upnpGetService($DLNARendererHash, "AVTransport")) { if(DLNARenderer_upnpGetService($DLNARendererHash, "AVTransport")) {
$DLNARendererHash->{helper}{avTransportSubscription} = DLNARenderer_upnpGetService($DLNARendererHash, "AVTransport")->subscribe(sub { DLNARenderer_subscriptionCallback($DLNARendererHash, @_); }); $DLNARendererHash->{helper}{avTransportSubscription} = DLNARenderer_upnpGetService($DLNARendererHash, "AVTransport")->subscribe(sub { DLNARenderer_subscriptionCallback($DLNARendererHash, @_); }, 1);
} }
#urn:upnp-org:serviceId:RenderingControl #urn:upnp-org:serviceId:RenderingControl
if(DLNARenderer_upnpGetService($DLNARendererHash, "RenderingControl")) { if(DLNARenderer_upnpGetService($DLNARendererHash, "RenderingControl")) {
$DLNARendererHash->{helper}{renderingControlSubscription} = DLNARenderer_upnpGetService($DLNARendererHash, "RenderingControl")->subscribe(sub { DLNARenderer_subscriptionCallback($DLNARendererHash, @_); }); $DLNARendererHash->{helper}{renderingControlSubscription} = DLNARenderer_upnpGetService($DLNARendererHash, "RenderingControl")->subscribe(sub { DLNARenderer_subscriptionCallback($DLNARendererHash, @_); }, 1);
} }
#urn:pure-com:serviceId:SpeakerManagement #urn:pure-com:serviceId:SpeakerManagement
if(DLNARenderer_upnpGetService($DLNARendererHash, "SpeakerManagement")) { if(DLNARenderer_upnpGetService($DLNARendererHash, "SpeakerManagement")) {
$DLNARendererHash->{helper}{speakerManagementSubscription} = DLNARenderer_upnpGetService($DLNARendererHash, "SpeakerManagement")->subscribe(sub { DLNARenderer_subscriptionCallback($DLNARendererHash, @_); }); $DLNARendererHash->{helper}{speakerManagementSubscription} = DLNARenderer_upnpGetService($DLNARendererHash, "SpeakerManagement")->subscribe(sub { DLNARenderer_subscriptionCallback($DLNARendererHash, @_); }, 1);
}
} }
#set online #set online
@ -1553,7 +1565,7 @@ sub DLNARenderer_addSocketsToMainloop {
#check if new sockets need to be added to mainloop #check if new sockets need to be added to mainloop
foreach my $s (@sockets) { foreach my $s (@sockets) {
#create chash and add to selectlist #create chash and add to selectlist
my $chash = DLNARenderer_newChash($hash, $s, {NAME => "DLNASocket-".$s->fileno()}); my $chash = DLNARenderer_newChash($hash, $s, {NAME => "DLNASocket-".$hash->{NAME}."-".$s->fileno()});
} }
return undef; return undef;