Merge pull request #2715 from signalwire/rss
[mod_rss] Remove from tree
This commit is contained in:
commit
559a97ecf5
|
@ -145,7 +145,6 @@ Release/
|
|||
/src/mod/applications/mod_nibblebill/Makefile
|
||||
/src/mod/applications/mod_osp/Makefile
|
||||
/src/mod/applications/mod_osp/Makefile.in
|
||||
/src/mod/applications/mod_rss/Makefile
|
||||
/src/mod/applications/mod_snipe_hunt/Makefile
|
||||
/src/mod/applications/mod_test/test/Makefile
|
||||
/src/mod/applications/mod_test/test/Makefile.in
|
||||
|
|
|
@ -79,7 +79,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "autoload_configs", "autoloa
|
|||
conf\vanilla\autoload_configs\logfile.conf.xml = conf\vanilla\autoload_configs\logfile.conf.xml
|
||||
conf\vanilla\autoload_configs\modules.conf.xml = conf\vanilla\autoload_configs\modules.conf.xml
|
||||
conf\vanilla\autoload_configs\openmrcp.conf.xml = conf\vanilla\autoload_configs\openmrcp.conf.xml
|
||||
conf\vanilla\autoload_configs\rss.conf.xml = conf\vanilla\autoload_configs\rss.conf.xml
|
||||
conf\vanilla\autoload_configs\sofia.conf.xml = conf\vanilla\autoload_configs\sofia.conf.xml
|
||||
conf\vanilla\autoload_configs\switch.conf.xml = conf\vanilla\autoload_configs\switch.conf.xml
|
||||
conf\vanilla\autoload_configs\syslog.conf.xml = conf\vanilla\autoload_configs\syslog.conf.xml
|
||||
|
@ -199,8 +198,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_xml_rpc", "src\mod\xml_
|
|||
{BED7539C-0099-4A14-AD5D-30828F15A171} = {BED7539C-0099-4A14-AD5D-30828F15A171}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_rss", "src\mod\applications\mod_rss\mod_rss.2017.vcxproj", "{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_conference", "src\mod\applications\mod_conference\mod_conference.2017.vcxproj", "{C24FB505-05D7-4319-8485-7540B44C8603}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dptools", "src\mod\applications\mod_dptools\mod_dptools.2017.vcxproj", "{B5881A85-FE70-4F64-8607-2CAAE52669C6}"
|
||||
|
@ -716,17 +713,6 @@ Global
|
|||
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|Win32.Build.0 = Release|Win32
|
||||
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.ActiveCfg = Release|x64
|
||||
{CBEC7225-0C21-4DA8-978E-1F158F8AD950}.Release|x64.Build.0 = Release|x64
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|Win32.ActiveCfg = Release|x64
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.ActiveCfg = Release|x64
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.All|x64.Build.0 = Release|x64
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Debug|x64.Build.0 = Debug|x64
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|Win32.Build.0 = Release|Win32
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.ActiveCfg = Release|x64
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}.Release|x64.Build.0 = Release|x64
|
||||
{C24FB505-05D7-4319-8485-7540B44C8603}.All|Win32.ActiveCfg = Release|x64
|
||||
{C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.ActiveCfg = Release|x64
|
||||
{C24FB505-05D7-4319-8485-7540B44C8603}.All|x64.Build.0 = Release|x64
|
||||
|
@ -2467,7 +2453,6 @@ Global
|
|||
{30A5B29C-983E-4580-9FD0-D647CCDCC7EB} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
|
||||
{1C453396-D912-4213-89FD-9B489162B7B5} = {A7AB4405-FDB7-4853-9FBB-1516B1C3D80A}
|
||||
{CBEC7225-0C21-4DA8-978E-1F158F8AD950} = {F69A4A6B-9360-4EBB-A280-22AA3C455AC5}
|
||||
{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
|
||||
{C24FB505-05D7-4319-8485-7540B44C8603} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
|
||||
{B5881A85-FE70-4F64-8607-2CAAE52669C6} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
|
||||
{05515420-16DE-4E63-BE73-85BE85BA5142} = {9ADF1E48-2F5C-4ED7-A893-596259FABFE0}
|
||||
|
|
|
@ -34,7 +34,6 @@ applications/mod_httapi
|
|||
#applications/mod_prefix
|
||||
#applications/mod_rad_auth
|
||||
#applications/mod_redis
|
||||
#applications/mod_rss
|
||||
applications/mod_signalwire
|
||||
applications/mod_sms
|
||||
#applications/mod_snapshot
|
||||
|
|
|
@ -34,7 +34,6 @@ applications/mod_oreka
|
|||
applications/mod_prefix
|
||||
#applications/mod_rad_auth
|
||||
applications/mod_redis
|
||||
applications/mod_rss
|
||||
applications/mod_signalwire
|
||||
applications/mod_sms
|
||||
applications/mod_snapshot
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
<configuration name="rss.conf" description="RSS Parser">
|
||||
<feeds>
|
||||
<!-- Just download the files to wherever and refer to them here -->
|
||||
<!-- <feed name="Slash Dot">/home/rss/rss.rss</feed> -->
|
||||
<!-- <feed name="News Forge">/home/rss/newsforge.rss</feed> -->
|
||||
</feeds>
|
||||
</configuration>
|
|
@ -85,7 +85,6 @@
|
|||
<!-- <load module="mod_flite"/> -->
|
||||
<!-- <load module="mod_pocketsphinx"/> -->
|
||||
<!-- <load module="mod_openmrcp"/> -->
|
||||
<!-- <load module="mod_rss"/> -->
|
||||
|
||||
<!-- Say -->
|
||||
<load module="mod_say_en"/>
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
<configuration name="rss.conf" description="RSS Parser">
|
||||
<feeds>
|
||||
<!-- Just download the files to wherever and refer to them here -->
|
||||
<!-- <feed name="Slash Dot">/home/rss/rss.rss</feed> -->
|
||||
<!-- <feed name="News Forge">/home/rss/newsforge.rss</feed> -->
|
||||
</feeds>
|
||||
</configuration>
|
|
@ -120,7 +120,6 @@
|
|||
<!-- <load module="mod_flite"/> -->
|
||||
<!-- <load module="mod_pocketsphinx"/> -->
|
||||
<!-- <load module="mod_tts_commandline"/> -->
|
||||
<!-- <load module="mod_rss"/> -->
|
||||
|
||||
<!-- Say -->
|
||||
<load module="mod_say_en"/>
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
<configuration name="rss.conf" description="RSS Parser">
|
||||
<feeds>
|
||||
<!-- Just download the files to wherever and refer to them here -->
|
||||
<!-- <feed name="Slash Dot">/home/rss/rss.rss</feed> -->
|
||||
<!-- <feed name="News Forge">/home/rss/newsforge.rss</feed> -->
|
||||
</feeds>
|
||||
</configuration>
|
|
@ -2121,7 +2121,6 @@ AC_CONFIG_FILES([Makefile
|
|||
src/mod/applications/mod_rad_auth/Makefile
|
||||
src/mod/applications/mod_random/Makefile
|
||||
src/mod/applications/mod_redis/Makefile
|
||||
src/mod/applications/mod_rss/Makefile
|
||||
src/mod/applications/mod_skel/Makefile
|
||||
src/mod/applications/mod_signalwire/Makefile
|
||||
src/mod/applications/mod_sms/Makefile
|
||||
|
|
|
@ -540,7 +540,6 @@ Recommends:
|
|||
freeswitch-mod-oreka (= \${binary:Version}),
|
||||
freeswitch-mod-pgsql (= \${binary:Version}),
|
||||
freeswitch-mod-redis (= \${binary:Version}),
|
||||
freeswitch-mod-rss (= \${binary:Version}),
|
||||
freeswitch-mod-sms (= \${binary:Version}),
|
||||
freeswitch-mod-snapshot (= \${binary:Version}),
|
||||
freeswitch-mod-spandsp (= \${binary:Version}),
|
||||
|
@ -624,7 +623,6 @@ Depends: \${misc:Depends}, freeswitch (= \${binary:Version}),
|
|||
freeswitch-mod-pgsql (= \${binary:Version}),
|
||||
freeswitch-mod-png (= \${binary:Version}),
|
||||
freeswitch-mod-redis (= \${binary:Version}),
|
||||
freeswitch-mod-rss (= \${binary:Version}),
|
||||
freeswitch-mod-signalwire (= \${binary:Version}),
|
||||
freeswitch-mod-shout (= \${binary:Version}),
|
||||
freeswitch-mod-sms (= \${binary:Version}),
|
||||
|
@ -849,7 +847,6 @@ Depends: \${misc:Depends}, freeswitch (= \${binary:Version}),
|
|||
freeswitch-mod-pgsql-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-png-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-redis-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-rss-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-sms-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-snapshot-dbg (= \${binary:Version}),
|
||||
freeswitch-mod-spandsp-dbg (= \${binary:Version}),
|
||||
|
|
|
@ -178,10 +178,6 @@ Description: Redis limit backend
|
|||
This module provides a mechanism to use Redis as a backend data
|
||||
store.
|
||||
|
||||
Module: applications/mod_rss
|
||||
Description: RSS browser
|
||||
This module provides an RSS browser.
|
||||
|
||||
Module: applications/mod_skel
|
||||
Description: Adds mod_skel
|
||||
Adds mod_skel.
|
||||
|
|
|
@ -468,15 +468,6 @@ Requires: %{name} = %{version}-%{release}
|
|||
Provides FreeSWITCH mod_redis, access to the redis key value pair db system from
|
||||
FreeSWITCH
|
||||
|
||||
%package application-rss
|
||||
Summary: FreeSWITCH mod_rss
|
||||
Group: System/Libraries
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
|
||||
%description application-rss
|
||||
Provides FreeSWITCH mod_rss, edisrse and read an XML based RSS feed, then read
|
||||
the entries aloud via a TTS engine
|
||||
|
||||
%package application-signalwire
|
||||
Summary: FreeSWITCH mod_signalwire
|
||||
Group: System/Libraries
|
||||
|
@ -1191,7 +1182,6 @@ Requires: freeswitch-application-limit
|
|||
Requires: freeswitch-application-memcache
|
||||
Requires: freeswitch-application-nibblebill
|
||||
Requires: freeswitch-application-redis
|
||||
Requires: freeswitch-application-rss
|
||||
Requires: freeswitch-application-signalwire
|
||||
Requires: freeswitch-application-sms
|
||||
Requires: freeswitch-application-snapshot
|
||||
|
@ -1271,7 +1261,7 @@ APPLICATION_MODULES_DE+="applications/mod_esl"
|
|||
APPLICATION_MODULES_FR="applications/mod_fifo applications/mod_fsk applications/mod_fsv applications/mod_hash \
|
||||
applications/mod_httapi applications/mod_http_cache applications/mod_lcr applications/mod_limit \
|
||||
applications/mod_memcache applications/mod_mongo applications/mod_nibblebill applications/mod_rad_auth \
|
||||
applications/mod_redis applications/mod_rss "
|
||||
applications/mod_redis "
|
||||
|
||||
APPLICATION_MODULES_SZ="applications/mod_signalwire applications/mod_sms applications/mod_snapshot \
|
||||
applications/mod_spandsp applications/mod_spy \
|
||||
|
@ -1769,7 +1759,6 @@ fi
|
|||
%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/pre_load_modules.conf.xml
|
||||
%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/presence_map.conf.xml
|
||||
%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/redis.conf.xml
|
||||
%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/rss.conf.xml
|
||||
%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/rtmp.conf.xml
|
||||
%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/shout.conf.xml
|
||||
%config(noreplace) %attr(0640, freeswitch, daemon) %{sysconfdir}/autoload_configs/signalwire.conf.xml
|
||||
|
@ -1925,9 +1914,6 @@ fi
|
|||
%files application-redis
|
||||
%{MODINSTDIR}/mod_redis.so*
|
||||
|
||||
%files application-rss
|
||||
%{MODINSTDIR}/mod_rss.so*
|
||||
|
||||
%files application-signalwire
|
||||
%{MODINSTDIR}/mod_signalwire.so*
|
||||
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
include $(top_srcdir)/build/modmake.rulesam
|
||||
MODNAME=mod_rss
|
||||
|
||||
mod_LTLIBRARIES = mod_rss.la
|
||||
mod_rss_la_SOURCES = mod_rss.c
|
||||
mod_rss_la_CFLAGS = $(AM_CFLAGS)
|
||||
mod_rss_la_LIBADD = $(switch_builddir)/libfreeswitch.la
|
||||
mod_rss_la_LDFLAGS = -avoid-version -module -no-undefined -shared
|
|
@ -1,7 +0,0 @@
|
|||
<configuration name="rss.conf" description="RSS Parser">
|
||||
<feeds>
|
||||
<!-- Just download the files to wherever and refer to them here -->
|
||||
<!-- <feed name="Slash Dot">/home/rss/rss.rss</feed> -->
|
||||
<!-- <feed name="News Forge">/home/rss/newsforge.rss</feed> -->
|
||||
</feeds>
|
||||
</configuration>
|
|
@ -1,7 +0,0 @@
|
|||
<include>
|
||||
<extension name="rss">
|
||||
<condition field="destination_number" expression="^rss$">
|
||||
<action application="rss"/>
|
||||
</condition>
|
||||
</extension>
|
||||
</include>
|
|
@ -1,141 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectName>mod_rss</ProjectName>
|
||||
<ProjectGuid>{B69247FA-ECD6-40ED-8E44-5CA6C3BAF9A4}</ProjectGuid>
|
||||
<RootNamespace>mod_rss</RootNamespace>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<CharacterSet>MultiByte</CharacterSet>
|
||||
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\..\..\..\w32\module_release.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\..\..\..\w32\module_debug.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\..\..\..\w32\module_release.props" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
<Import Project="..\..\..\..\w32\module_debug.props" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;MOD_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Midl>
|
||||
<TargetEnvironment>X64</TargetEnvironment>
|
||||
</Midl>
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<RandomizedBaseAddress>false</RandomizedBaseAddress>
|
||||
<DataExecutionPrevention>
|
||||
</DataExecutionPrevention>
|
||||
<TargetMachine>MachineX64</TargetMachine>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="mod_rss.c" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\..\libs\win32\apr\libapr.2017.vcxproj">
|
||||
<Project>{f6c55d93-b927-4483-bb69-15aef3dd2dff}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\..\..\w32\Library\FreeSwitchCore.2017.vcxproj">
|
||||
<Project>{202d7a4e-760d-4d0e-afa1-d7459ced30ff}</Project>
|
||||
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -1,649 +0,0 @@
|
|||
/*
|
||||
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
||||
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
|
||||
*
|
||||
* Version: MPL 1.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Anthony Minessale II <anthm@freeswitch.org>
|
||||
* Portions created by the Initial Developer are Copyright (C)
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Anthony Minessale II <anthm@freeswitch.org>
|
||||
* Bret McDanel <trixter AT 0xdecafbad.com>
|
||||
*
|
||||
*
|
||||
* mod_rss.c -- RSS Browser
|
||||
*
|
||||
*/
|
||||
#include <switch.h>
|
||||
|
||||
SWITCH_MODULE_LOAD_FUNCTION(mod_rss_load);
|
||||
SWITCH_MODULE_DEFINITION(mod_rss, mod_rss_load, NULL, NULL);
|
||||
|
||||
typedef enum {
|
||||
SFLAG_INSTRUCT = (1 << 0),
|
||||
SFLAG_INFO = (1 << 1),
|
||||
SFLAG_MAIN = (1 << 2)
|
||||
} SFLAGS;
|
||||
|
||||
/* helper object */
|
||||
struct dtmf_buffer {
|
||||
int32_t index;
|
||||
uint32_t flags;
|
||||
int32_t speed;
|
||||
char voice[80];
|
||||
switch_speech_handle_t *sh;
|
||||
};
|
||||
|
||||
#define TTS_MEAN_SPEED 170
|
||||
#define TTS_MAX_ENTRIES 99
|
||||
#define TTS_DEFAULT_ENGINE "flite"
|
||||
#define TTS_DEFAULT_VOICE "slt"
|
||||
|
||||
#define MATCH_COUNT
|
||||
|
||||
struct rss_entry {
|
||||
uint8_t inuse;
|
||||
char *title_txt;
|
||||
char *description_txt;
|
||||
char *subject_txt;
|
||||
char *dept_txt;
|
||||
};
|
||||
|
||||
#ifdef MATCH_COUNT
|
||||
static uint32_t match_count(char *str, uint32_t max)
|
||||
{
|
||||
char tstr[80] = "";
|
||||
uint32_t matches = 0, x = 0;
|
||||
uint32_t len = (uint32_t) strlen(str);
|
||||
|
||||
for (x = 0; x < max; x++) {
|
||||
switch_snprintf(tstr, sizeof(tstr), "%u", x);
|
||||
if (!strncasecmp(str, tstr, len)) {
|
||||
matches++;
|
||||
}
|
||||
}
|
||||
return matches;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
dtmf handler function you can hook up to be executed when a digit is dialed during playback
|
||||
if you return anything but SWITCH_STATUS_SUCCESS the playback will stop.
|
||||
*/
|
||||
static switch_status_t on_dtmf(switch_core_session_t *session, void *input, switch_input_type_t itype, void *buf, unsigned int buflen)
|
||||
{
|
||||
switch (itype) {
|
||||
case SWITCH_INPUT_TYPE_DTMF:{
|
||||
switch_dtmf_t *dtmf = (switch_dtmf_t *) input;
|
||||
struct dtmf_buffer *dtb;
|
||||
dtb = (struct dtmf_buffer *) buf;
|
||||
|
||||
switch (dtmf->digit) {
|
||||
case '#':
|
||||
switch_set_flag(dtb, SFLAG_MAIN);
|
||||
return SWITCH_STATUS_BREAK;
|
||||
case '6':
|
||||
dtb->index++;
|
||||
return SWITCH_STATUS_BREAK;
|
||||
case '4':
|
||||
dtb->index--;
|
||||
return SWITCH_STATUS_BREAK;
|
||||
case '*':
|
||||
if (switch_test_flag(dtb->sh, SWITCH_SPEECH_FLAG_PAUSE)) {
|
||||
switch_clear_flag(dtb->sh, SWITCH_SPEECH_FLAG_PAUSE);
|
||||
} else {
|
||||
switch_set_flag(dtb->sh, SWITCH_SPEECH_FLAG_PAUSE);
|
||||
}
|
||||
break;
|
||||
case '5':
|
||||
switch_core_speech_text_param_tts(dtb->sh, "voice", "next");
|
||||
switch_set_flag(dtb, SFLAG_INFO);
|
||||
return SWITCH_STATUS_BREAK;
|
||||
case '9':
|
||||
switch_core_speech_text_param_tts(dtb->sh, "voice", dtb->voice);
|
||||
switch_set_flag(dtb, SFLAG_INFO);
|
||||
return SWITCH_STATUS_BREAK;
|
||||
case '2':
|
||||
if (dtb->speed < 260) {
|
||||
dtb->speed += 30;
|
||||
switch_core_speech_numeric_param_tts(dtb->sh, "speech/rate", dtb->speed);
|
||||
switch_set_flag(dtb, SFLAG_INFO);
|
||||
return SWITCH_STATUS_BREAK;
|
||||
}
|
||||
break;
|
||||
case '7':
|
||||
dtb->speed = TTS_MEAN_SPEED;
|
||||
switch_core_speech_numeric_param_tts(dtb->sh, "speech/rate", dtb->speed);
|
||||
switch_set_flag(dtb, SFLAG_INFO);
|
||||
return SWITCH_STATUS_BREAK;
|
||||
case '8':
|
||||
if (dtb->speed > 80) {
|
||||
dtb->speed -= 30;
|
||||
switch_core_speech_numeric_param_tts(dtb->sh, "speech/rate", dtb->speed);
|
||||
switch_set_flag(dtb, SFLAG_INFO);
|
||||
return SWITCH_STATUS_BREAK;
|
||||
}
|
||||
break;
|
||||
case '0':
|
||||
switch_set_flag(dtb, SFLAG_INSTRUCT);
|
||||
return SWITCH_STATUS_BREAK;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
SWITCH_STANDARD_APP(rss_function)
|
||||
{
|
||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||
switch_status_t status;
|
||||
const char *err = NULL;
|
||||
struct dtmf_buffer dtb = { 0 };
|
||||
switch_xml_t xml = NULL, item, xchannel = NULL;
|
||||
struct rss_entry entries[TTS_MAX_ENTRIES] = { {0} };
|
||||
uint32_t i = 0;
|
||||
char *title_txt = "", *description_txt = "", *rights_txt = "";
|
||||
switch_codec_t speech_codec;
|
||||
char *engine = TTS_DEFAULT_ENGINE;
|
||||
char *voice = TTS_DEFAULT_VOICE;
|
||||
char *timer_name = NULL;
|
||||
switch_speech_handle_t sh;
|
||||
switch_speech_flag_t flags = SWITCH_SPEECH_FLAG_NONE;
|
||||
switch_timer_t timer = { 0 }, *timerp = NULL;
|
||||
uint32_t last;
|
||||
char *mydata = NULL;
|
||||
char *filename = NULL;
|
||||
char *argv[3], *feed_list[TTS_MAX_ENTRIES] = { 0 }, *feed_names[TTS_MAX_ENTRIES] = {
|
||||
0};
|
||||
int feed_index = 0;
|
||||
const char *cf = "rss.conf";
|
||||
switch_xml_t cfg, cxml, feeds, feed;
|
||||
char buf[1024] = "";
|
||||
int32_t jumpto = -1;
|
||||
uint32_t matches = 0;
|
||||
switch_input_args_t args = { 0 };
|
||||
const char *vcf = NULL;
|
||||
char *chanvars = switch_channel_build_param_string(channel, NULL, NULL);
|
||||
switch_codec_implementation_t read_impl = { 0 };
|
||||
uint32_t rate, interval, channels;
|
||||
switch_core_session_get_read_impl(session, &read_impl);
|
||||
interval = read_impl.microseconds_per_packet / 1000;
|
||||
|
||||
if ((vcf = switch_channel_get_variable(channel, "rss_alt_config"))) {
|
||||
cf = vcf;
|
||||
}
|
||||
|
||||
if (!(cxml = switch_xml_open_cfg(cf, &cfg, NULL))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Open of %s failed\n", cf);
|
||||
return;
|
||||
}
|
||||
switch_safe_free(chanvars);
|
||||
|
||||
if ((feeds = switch_xml_child(cfg, "feeds"))) {
|
||||
for (feed = switch_xml_child(feeds, "feed"); feed; feed = feed->next) {
|
||||
char *name = (char *) switch_xml_attr_soft(feed, "name");
|
||||
char *expanded = NULL;
|
||||
char *idx = feed->txt;
|
||||
|
||||
if ((expanded = switch_channel_expand_variables(channel, idx)) == idx) {
|
||||
expanded = NULL;
|
||||
} else {
|
||||
idx = expanded;
|
||||
}
|
||||
|
||||
if (!name) {
|
||||
name = "Error No Name.";
|
||||
}
|
||||
|
||||
feed_list[feed_index] = switch_core_session_strdup(session, idx);
|
||||
switch_safe_free(expanded);
|
||||
|
||||
if ((expanded = switch_channel_expand_variables(channel, name)) == name) {
|
||||
expanded = NULL;
|
||||
} else {
|
||||
name = expanded;
|
||||
}
|
||||
feed_names[feed_index] = switch_core_session_strdup(session, name);
|
||||
switch_safe_free(expanded);
|
||||
feed_index++;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
switch_xml_free(cxml);
|
||||
|
||||
switch_channel_answer(channel);
|
||||
|
||||
if (!zstr(data)) {
|
||||
if ((mydata = switch_core_session_strdup(session, data))) {
|
||||
switch_separate_string(mydata, ' ', argv, sizeof(argv) / sizeof(argv[0]));
|
||||
|
||||
if (argv[0]) {
|
||||
engine = argv[0];
|
||||
if (argv[1]) {
|
||||
voice = argv[1];
|
||||
if (argv[2]) {
|
||||
jumpto = atoi(argv[2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!feed_index) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "No Feeds Specified!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (switch_channel_media_ready(channel)) {
|
||||
rate = read_impl.actual_samples_per_second;
|
||||
channels = read_impl.number_of_channels;
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Codec Error!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&sh, 0, sizeof(sh));
|
||||
if (switch_core_speech_open(&sh, engine, voice, rate, interval, channels, &flags, switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Invalid TTS module!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
if (switch_core_codec_init(&speech_codec,
|
||||
"L16",
|
||||
NULL,
|
||||
NULL,
|
||||
(int) rate,
|
||||
interval,
|
||||
1, SWITCH_CODEC_FLAG_ENCODE | SWITCH_CODEC_FLAG_DECODE, NULL,
|
||||
switch_core_session_get_pool(session)) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Raw Codec Activated\n");
|
||||
} else {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Raw Codec Activation Failed L16@%uhz 1 channel %dms\n", rate, interval);
|
||||
flags = 0;
|
||||
switch_core_speech_close(&sh, &flags);
|
||||
return;
|
||||
}
|
||||
|
||||
if (timer_name) {
|
||||
if (switch_core_timer_init(&timer, timer_name, interval, (int) (rate / 50), switch_core_session_get_pool(session)) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Setup timer failed!\n");
|
||||
switch_core_codec_destroy(&speech_codec);
|
||||
flags = 0;
|
||||
switch_core_speech_close(&sh, &flags);
|
||||
return;
|
||||
}
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Setup timer success %u bytes per %d ms!\n", (rate / 50) * 2, interval);
|
||||
|
||||
/* start a thread to absorb incoming audio */
|
||||
switch_core_service_session(session);
|
||||
timerp = &timer;
|
||||
}
|
||||
|
||||
while (switch_channel_ready(channel)) {
|
||||
int32_t len = 0, idx = 0;
|
||||
char cmd[3];
|
||||
main_menu:
|
||||
filename = NULL;
|
||||
len = 0;
|
||||
*cmd = '\0';
|
||||
title_txt = description_txt = rights_txt = "";
|
||||
|
||||
if (jumpto > -1) {
|
||||
switch_snprintf(cmd, sizeof(cmd), "%d", jumpto);
|
||||
jumpto = -1;
|
||||
} else {
|
||||
switch_core_speech_flush_tts(&sh);
|
||||
switch_ivr_sleep(session, 500, SWITCH_FALSE, NULL);
|
||||
|
||||
#ifdef MATCH_COUNT
|
||||
switch_snprintf(buf + len, sizeof(buf) - len, "%s",
|
||||
", Main Menu."
|
||||
"Select one of the following news sources, or press 0 to exit. ");
|
||||
#else
|
||||
switch_snprintf(buf + len, sizeof(buf) - len, "%s",
|
||||
",Main Menu. "
|
||||
"Select one of the following news sources, followed by the pound key or press 0 to exit. ");
|
||||
#endif
|
||||
len = (int32_t) strlen(buf);
|
||||
|
||||
for (idx = 0; idx < feed_index; idx++) {
|
||||
switch_snprintf(buf + len, sizeof(buf) - len, "%d: %s. />", idx + 1, feed_names[idx]);
|
||||
len = (int32_t) strlen(buf);
|
||||
}
|
||||
|
||||
args.input_callback = NULL;
|
||||
args.buf = cmd;
|
||||
args.buflen = sizeof(cmd);
|
||||
status = switch_ivr_speak_text_handle(session, &sh, &speech_codec, timerp, buf, &args);
|
||||
if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) {
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
if (*cmd != '\0') {
|
||||
int32_t x;
|
||||
char *p;
|
||||
|
||||
if (strchr(cmd, '0')) {
|
||||
break;
|
||||
}
|
||||
|
||||
if ((p = strchr(cmd, '#'))) {
|
||||
*p = '\0';
|
||||
#ifdef MATCH_COUNT
|
||||
/* Hmmm... I know there are no more matches so I don't *need* them to press pound but
|
||||
I already told them to press it. Will this confuse people or not? Let's make em press
|
||||
pound unless this define is enabled for now.
|
||||
*/
|
||||
} else if (match_count(cmd, feed_index) > 1) {
|
||||
#else
|
||||
} else {
|
||||
#endif
|
||||
char term;
|
||||
char *cp;
|
||||
switch_size_t blen = sizeof(cmd) - strlen(cmd);
|
||||
|
||||
cp = cmd + blen;
|
||||
switch_ivr_collect_digits_count(session, cp, blen, blen, "#", &term, 5000, 0, 0);
|
||||
}
|
||||
|
||||
x = atoi(cmd) - 1;
|
||||
|
||||
if (x > -1 && x < feed_index) {
|
||||
filename = feed_list[x];
|
||||
} else if (matches > 1) {
|
||||
|
||||
} else {
|
||||
args.input_callback = NULL;
|
||||
args.buf = NULL;
|
||||
args.buflen = 0;
|
||||
status = switch_ivr_speak_text_handle(session, &sh, &speech_codec, timerp, "I'm sorry. That is an Invalid Selection. ", &args);
|
||||
if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) {
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!filename) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!(xml = switch_xml_parse_file(filename))) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Open of %s failed\n", filename);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
err = switch_xml_error(xml);
|
||||
|
||||
if (!zstr(err)) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_WARNING, "Error [%s]\n", err);
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if ((xchannel = switch_xml_child(xml, "channel"))) {
|
||||
switch_xml_t title, description, rights;
|
||||
|
||||
if ((title = switch_xml_child(xchannel, "title"))) {
|
||||
title_txt = title->txt;
|
||||
}
|
||||
|
||||
if ((description = switch_xml_child(xchannel, "description"))) {
|
||||
description_txt = description->txt;
|
||||
}
|
||||
|
||||
if ((rights = switch_xml_child(xchannel, "dc:rights"))) {
|
||||
rights_txt = rights->txt;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (!(item = switch_xml_child(xml, "item"))) {
|
||||
if (xchannel) {
|
||||
item = switch_xml_child(xchannel, "item");
|
||||
}
|
||||
}
|
||||
|
||||
memset(entries, 0, sizeof(entries));
|
||||
|
||||
for (i = 0; item; item = item->next) {
|
||||
switch_xml_t title, description, subject, dept;
|
||||
char *p;
|
||||
|
||||
entries[i].inuse = 1;
|
||||
entries[i].title_txt = NULL;
|
||||
entries[i].description_txt = NULL;
|
||||
entries[i].subject_txt = NULL;
|
||||
entries[i].dept_txt = NULL;
|
||||
|
||||
if ((title = switch_xml_child(item, "title"))) {
|
||||
entries[i].title_txt = title->txt;
|
||||
}
|
||||
|
||||
if ((description = switch_xml_child(item, "description"))) {
|
||||
char *t, *e;
|
||||
entries[i].description_txt = description->txt;
|
||||
for (;;) {
|
||||
if (!(t = strchr(entries[i].description_txt, '<'))) {
|
||||
break;
|
||||
}
|
||||
if (!(e = strchr(t, '>'))) {
|
||||
break;
|
||||
}
|
||||
|
||||
memset(t, 32, ++e - t);
|
||||
}
|
||||
}
|
||||
|
||||
if ((subject = switch_xml_child(item, "dc:subject"))) {
|
||||
entries[i].subject_txt = subject->txt;
|
||||
}
|
||||
|
||||
if ((dept = switch_xml_child(item, "slash:department"))) {
|
||||
entries[i].dept_txt = dept->txt;
|
||||
}
|
||||
|
||||
if (entries[i].description_txt && (p = strchr(entries[i].description_txt, '<'))) {
|
||||
*p = '\0';
|
||||
}
|
||||
#ifdef _STRIP_SOME_CHARS_
|
||||
for (p = entries[i].description_txt; *p; p++) {
|
||||
if (*p == '\'' || *p == '"' || *p == ':') {
|
||||
*p = ' ';
|
||||
}
|
||||
}
|
||||
#endif
|
||||
i++;
|
||||
}
|
||||
|
||||
if (switch_channel_ready(channel)) {
|
||||
switch_time_exp_t tm;
|
||||
char date[80] = "";
|
||||
switch_size_t retsize;
|
||||
char dtmf[5] = "";
|
||||
|
||||
switch_time_exp_lt(&tm, switch_micro_time_now());
|
||||
switch_strftime_nocheck(date, &retsize, sizeof(date), "%I:%M %p", &tm);
|
||||
|
||||
switch_ivr_sleep(session, 500, SWITCH_FALSE, NULL);
|
||||
|
||||
switch_snprintf(buf, sizeof(buf),
|
||||
",%s. %s. %s. local time: %s, Press 0 for options, 5 to change voice, or pound to return to the main menu. ",
|
||||
title_txt, description_txt, rights_txt, date);
|
||||
args.input_callback = NULL;
|
||||
args.buf = dtmf;
|
||||
args.buflen = sizeof(dtmf);
|
||||
status = switch_ivr_speak_text_handle(session, &sh, &speech_codec, timerp, buf, &args);
|
||||
if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) {
|
||||
goto finished;
|
||||
}
|
||||
if (*dtmf != '\0') {
|
||||
switch (*dtmf) {
|
||||
case '0':
|
||||
switch_set_flag(&dtb, SFLAG_INSTRUCT);
|
||||
break;
|
||||
case '#':
|
||||
goto main_menu;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (last = 0; last < TTS_MAX_ENTRIES; last++) {
|
||||
if (!entries[last].inuse) {
|
||||
last--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
dtb.index = 0;
|
||||
dtb.sh = &sh;
|
||||
dtb.speed = TTS_MEAN_SPEED;
|
||||
//switch_set_flag(&dtb, SFLAG_INFO);
|
||||
switch_copy_string(dtb.voice, voice, sizeof(dtb.voice));
|
||||
while (entries[0].inuse && switch_channel_ready(channel)) {
|
||||
while (switch_channel_ready(channel)) {
|
||||
uint8_t cont = 0;
|
||||
|
||||
if (dtb.index >= TTS_MAX_ENTRIES) {
|
||||
dtb.index = 0;
|
||||
}
|
||||
if (dtb.index < 0) {
|
||||
dtb.index = last;
|
||||
}
|
||||
|
||||
if (!entries[dtb.index].inuse) {
|
||||
dtb.index = 0;
|
||||
continue;
|
||||
}
|
||||
if (switch_channel_ready(channel)) {
|
||||
char tmpbuf[1024] = "";
|
||||
uint32_t tmplen = 0;
|
||||
|
||||
if (switch_test_flag(&dtb, SFLAG_MAIN)) {
|
||||
switch_clear_flag(&dtb, SFLAG_MAIN);
|
||||
goto main_menu;
|
||||
}
|
||||
if (switch_test_flag(&dtb, SFLAG_INFO)) {
|
||||
switch_clear_flag(&dtb, SFLAG_INFO);
|
||||
switch_snprintf(tmpbuf + tmplen, sizeof(tmpbuf) - tmplen, "%s %s. I am speaking at %u words per minute. ", sh.engine, sh.voice,
|
||||
dtb.speed);
|
||||
tmplen = (uint32_t) strlen(tmpbuf);
|
||||
}
|
||||
|
||||
if (switch_test_flag(&dtb, SFLAG_INSTRUCT)) {
|
||||
switch_clear_flag(&dtb, SFLAG_INSTRUCT);
|
||||
cont = 1;
|
||||
switch_snprintf(tmpbuf + tmplen, sizeof(tmpbuf) - tmplen, "%s",
|
||||
"Press star to pause or resume speech. "
|
||||
"To go to the next item, press six. "
|
||||
"To go back, press 4. "
|
||||
"Press two to go faster, eight to slow down, or 7 to resume normal speed. "
|
||||
"To change voices, press five. To restore the original voice press 9. "
|
||||
"To hear these options again, press zero or press pound to return to the main menu. ");
|
||||
} else {
|
||||
switch_snprintf(tmpbuf + tmplen, sizeof(tmpbuf) - tmplen, "Story %d. ", dtb.index + 1);
|
||||
tmplen = (uint32_t) strlen(tmpbuf);
|
||||
|
||||
if (entries[dtb.index].subject_txt) {
|
||||
switch_snprintf(tmpbuf + tmplen, sizeof(tmpbuf) - tmplen, "Subject: %s. ", entries[dtb.index].subject_txt);
|
||||
tmplen = (uint32_t) strlen(tmpbuf);
|
||||
}
|
||||
|
||||
if (entries[dtb.index].dept_txt) {
|
||||
switch_snprintf(tmpbuf + tmplen, sizeof(tmpbuf) - tmplen, "From the %s department. ", entries[dtb.index].dept_txt);
|
||||
tmplen = (uint32_t) strlen(tmpbuf);
|
||||
}
|
||||
|
||||
if (entries[dtb.index].title_txt) {
|
||||
switch_snprintf(tmpbuf + tmplen, sizeof(tmpbuf) - tmplen, "%s", entries[dtb.index].title_txt);
|
||||
}
|
||||
}
|
||||
switch_core_speech_flush_tts(&sh);
|
||||
args.input_callback = on_dtmf;
|
||||
args.buf = &dtb;
|
||||
args.buflen = sizeof(dtb);
|
||||
status = switch_ivr_speak_text_handle(session, &sh, &speech_codec, timerp, tmpbuf, &args);
|
||||
if (status == SWITCH_STATUS_BREAK) {
|
||||
continue;
|
||||
} else if (status != SWITCH_STATUS_SUCCESS) {
|
||||
goto finished;
|
||||
}
|
||||
|
||||
if (cont) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (entries[dtb.index].description_txt) {
|
||||
args.input_callback = on_dtmf;
|
||||
args.buf = &dtb;
|
||||
args.buflen = sizeof(dtb);
|
||||
status = switch_ivr_speak_text_handle(session, &sh, &speech_codec, timerp, entries[dtb.index].description_txt, &args);
|
||||
}
|
||||
if (status == SWITCH_STATUS_BREAK) {
|
||||
continue;
|
||||
} else if (status != SWITCH_STATUS_SUCCESS) {
|
||||
goto finished;
|
||||
}
|
||||
}
|
||||
|
||||
dtb.index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
finished:
|
||||
switch_core_speech_close(&sh, &flags);
|
||||
switch_core_codec_destroy(&speech_codec);
|
||||
|
||||
if (timerp) {
|
||||
/* End the audio absorbing thread */
|
||||
switch_core_thread_session_end(session);
|
||||
switch_core_timer_destroy(&timer);
|
||||
}
|
||||
|
||||
switch_xml_free(xml);
|
||||
switch_core_session_reset(session, SWITCH_TRUE, SWITCH_TRUE);
|
||||
}
|
||||
|
||||
|
||||
SWITCH_MODULE_LOAD_FUNCTION(mod_rss_load)
|
||||
{
|
||||
switch_application_interface_t *app_interface;
|
||||
|
||||
/* connect my internal structure to the blank pointer passed to me */
|
||||
*module_interface = switch_loadable_module_create_module_interface(pool, modname);
|
||||
SWITCH_ADD_APP(app_interface, "rss", NULL, NULL, rss_function, NULL, SAF_NONE);
|
||||
|
||||
/* indicate that the module should continue to be loaded */
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* For Emacs:
|
||||
* Local Variables:
|
||||
* mode:c
|
||||
* indent-tabs-mode:t
|
||||
* tab-width:4
|
||||
* c-basic-offset:4
|
||||
* End:
|
||||
* For VIM:
|
||||
* vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:
|
||||
*/
|
|
@ -1,12 +0,0 @@
|
|||
if (session.ready()) {
|
||||
session.answer();
|
||||
session.speak("cepstral","David","Please wait while we refresh the RSS feeds.")
|
||||
|
||||
fetchURLFile("http://weather.yahooapis.com/forecastrss?p=60610","rss/weather.rss");
|
||||
fetchURLFile("http://rss.news.yahoo.com/rss/topstories","rss/yahootop.rss");
|
||||
fetchURLFile("http://rss.news.yahoo.com/rss/science","rss/yahoosci.rss");
|
||||
fetchURLFile("http://rss.news.yahoo.com/rss/business","rss/yahoobus.rss");
|
||||
fetchURLFile("http://rss.news.yahoo.com/rss/entertainment","rss/yahooent.rss");
|
||||
fetchURLFile("http://rss.slashdot.org/Slashdot/slashdot","rss/slashdot.rss");
|
||||
fetchURLFile("http://www.freeswitch.org/xml.php","rss/freeswitch.rss");
|
||||
}
|
|
@ -289,14 +289,6 @@
|
|||
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
|
||||
<RefTargetDir>INSTALLFOLDER</RefTargetDir>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\src\mod\applications\mod_rss\mod_rss.2017.vcxproj">
|
||||
<Name>mod_rss</Name>
|
||||
<Project>{b69247fa-ecd6-40ed-8e44-5ca6c3baf9a4}</Project>
|
||||
<Private>True</Private>
|
||||
<DoNotHarvest>True</DoNotHarvest>
|
||||
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
|
||||
<RefTargetDir>INSTALLFOLDER</RefTargetDir>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\..\src\mod\applications\mod_signalwire\mod_signalwire.2017.vcxproj">
|
||||
<Name>mod_signalwire</Name>
|
||||
<Project>{b19ae6fc-bfff-428d-b483-3bbeaeccc618}</Project>
|
||||
|
|
Loading…
Reference in New Issue