Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch-contrib
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch-contrib
Commits
0b3959e6
提交
0b3959e6
authored
6月 17, 2012
作者:
Mitch Capper
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Added XFER aliases also (right click on xfer button) through contact plugin
上级
10905328
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
161 行增加
和
10 行删除
+161
-10
Broker.cs
mitchcapper/FSClient/Broker.cs
+21
-0
IContactPlugin.cs
mitchcapper/FSClient/IContactPlugin.cs
+10
-1
IncomingCallNotification.xaml.cs
mitchcapper/FSClient/IncomingCallNotification.xaml.cs
+1
-0
MainWindow.xaml.cs
mitchcapper/FSClient/MainWindow.xaml.cs
+1
-0
SimpleContactPluginBase.cs
mitchcapper/FSClient/SimpleContactPluginBase.cs
+99
-7
SimpleXmlContactPlugin.cs
...FSClient/SimpleXmlContactPlugin/SimpleXmlContactPlugin.cs
+29
-2
没有找到文件。
mitchcapper/FSClient/Broker.cs
浏览文件 @
0b3959e6
...
@@ -6,6 +6,7 @@ using System.Net;
...
@@ -6,6 +6,7 @@ using System.Net;
using
System.Text
;
using
System.Text
;
using
System.Threading
;
using
System.Threading
;
using
System.Windows
;
using
System.Windows
;
using
System.Windows.Controls
;
using
System.Xml
;
using
System.Xml
;
using
FreeSWITCH.Native
;
using
FreeSWITCH.Native
;
...
@@ -53,6 +54,26 @@ namespace FSClient {
...
@@ -53,6 +54,26 @@ namespace FSClient {
contact_plugin_manager
=
new
ContactPluginManager
();
contact_plugin_manager
=
new
ContactPluginManager
();
contact_plugin_manager
.
LoadPlugins
();
contact_plugin_manager
.
LoadPlugins
();
}
}
private
ContextMenu
_XFERContextMenu
;
public
ContextMenu
XFERContextMenu
(){
if
(
_XFERContextMenu
==
null
){
_XFERContextMenu
=
new
ContextMenu
();
_XFERContextMenu
.
Opened
+=
XFERContextMenuOpened
;
}
return
_XFERContextMenu
;
}
public
delegate
void
XFERMenuOpeningDel
(
Call
active_call
,
ContextMenu
menu
);
public
XFERMenuOpeningDel
XFERMenuOpenedHandler
;
private
void
XFERContextMenuOpened
(
object
sender
,
RoutedEventArgs
e
){
ContextMenu
menu
=
sender
as
ContextMenu
;
menu
.
Items
.
Clear
();
if
(
XFERMenuOpenedHandler
!=
null
)
XFERMenuOpenedHandler
(
Call
.
active_call
,
menu
);
}
private
void
init_us
()
{
private
void
init_us
()
{
if
(
is_inited
)
if
(
is_inited
)
return
;
return
;
...
...
mitchcapper/FSClient/IContactPlugin.cs
浏览文件 @
0b3959e6
...
@@ -75,8 +75,16 @@ namespace FSClient {
...
@@ -75,8 +75,16 @@ namespace FSClient {
if
(
active_plugin
!=
null
){
if
(
active_plugin
!=
null
){
Call
.
calls
.
CollectionChanged
+=
calls_CollectionChanged
;
Call
.
calls
.
CollectionChanged
+=
calls_CollectionChanged
;
Call
.
CallRightClickMenuShowing
+=
calls_RightClickMenuShowing
;
Call
.
CallRightClickMenuShowing
+=
calls_RightClickMenuShowing
;
Broker
.
get_instance
().
XFERMenuOpenedHandler
+=
broker_xferMenuOpened
;
}
}
}
}
private
void
broker_xferMenuOpened
(
Call
active_call
,
ContextMenu
menu
){
if
(
active_plugin
==
null
)
return
;
active_plugin
.
contact_plugin
.
XFERRightClickMenu
(
active_call
,
menu
);
}
protected
override
void
HandlePluginLoadException
(
PluginData
data
,
Exception
e
){
protected
override
void
HandlePluginLoadException
(
PluginData
data
,
Exception
e
){
base
.
HandlePluginLoadException
(
data
,
e
);
base
.
HandlePluginLoadException
(
data
,
e
);
active_plugin
=
null
;
active_plugin
=
null
;
...
@@ -190,7 +198,8 @@ namespace FSClient {
...
@@ -190,7 +198,8 @@ namespace FSClient {
public
abstract
class
IContactPlugin
:
IPlugin
{
public
abstract
class
IContactPlugin
:
IPlugin
{
public
delegate
void
NumberResolved
(
String
DisplayName
);
public
delegate
void
NumberResolved
(
String
DisplayName
);
public
abstract
void
ResolveNumber
(
String
number
,
NumberResolved
on_resolved
);
public
abstract
void
ResolveNumber
(
String
number
,
NumberResolved
on_resolved
);
public
abstract
void
CallRightClickMenu
(
Call
call
,
ContextMenu
menu
);
public
abstract
void
CallRightClickMenu
(
Call
call
,
ContextMenu
menu
);
public
abstract
void
XFERRightClickMenu
(
Call
call
,
ContextMenu
menu
);
public
abstract
IEnumerable
<
MenuItem
>
ContactRightClickMenu
();
public
abstract
IEnumerable
<
MenuItem
>
ContactRightClickMenu
();
public
abstract
bool
HandleSearchBox
(
OurAutoCompleteBox
box
);
public
abstract
bool
HandleSearchBox
(
OurAutoCompleteBox
box
);
...
...
mitchcapper/FSClient/IncomingCallNotification.xaml.cs
浏览文件 @
0b3959e6
...
@@ -26,6 +26,7 @@ namespace FSClient {
...
@@ -26,6 +26,7 @@ namespace FSClient {
prop_changed
=
new
System
.
ComponentModel
.
PropertyChangedEventHandler
(
call_PropertyChanged
);
prop_changed
=
new
System
.
ComponentModel
.
PropertyChangedEventHandler
(
call_PropertyChanged
);
call
.
PropertyChanged
+=
prop_changed
;
call
.
PropertyChanged
+=
prop_changed
;
btnSendVoicemail
.
Visibility
=
call
.
CanSendToVoicemail
()
?
Visibility
.
Visible
:
Visibility
.
Hidden
;
btnSendVoicemail
.
Visibility
=
call
.
CanSendToVoicemail
()
?
Visibility
.
Visible
:
Visibility
.
Hidden
;
btnTransfer
.
ContextMenu
=
Broker
.
get_instance
().
XFERContextMenu
();
}
}
void
call_PropertyChanged
(
object
sender
,
System
.
ComponentModel
.
PropertyChangedEventArgs
e
)
{
void
call_PropertyChanged
(
object
sender
,
System
.
ComponentModel
.
PropertyChangedEventArgs
e
)
{
...
...
mitchcapper/FSClient/MainWindow.xaml.cs
浏览文件 @
0b3959e6
...
@@ -281,6 +281,7 @@ namespace FSClient {
...
@@ -281,6 +281,7 @@ namespace FSClient {
break
;
break
;
}
}
ResizeForm
();
ResizeForm
();
btnTransfer
.
ContextMenu
=
broker
.
XFERContextMenu
();
}
}
void
MainWindow_MouseUp
(
object
sender
,
MouseButtonEventArgs
e
)
{
void
MainWindow_MouseUp
(
object
sender
,
MouseButtonEventArgs
e
)
{
...
...
mitchcapper/FSClient/SimpleContactPluginBase.cs
浏览文件 @
0b3959e6
...
@@ -11,13 +11,19 @@ namespace FSClient
...
@@ -11,13 +11,19 @@ namespace FSClient
public
abstract
class
SimpleContactPluginBase
:
IContactPlugin
public
abstract
class
SimpleContactPluginBase
:
IContactPlugin
{
{
protected
abstract
void
_TryResolveNewNumber
(
string
number
,
NumberResolved
on_resolved
);
protected
abstract
void
_TryResolveNewNumber
(
string
number
,
NumberResolved
on_resolved
);
protected
abstract
void
LoadDatabase
(
ref
Dictionary
<
string
,
string
>
number_to_alias_db
);
protected
abstract
void
LoadDatabase
(
ref
Dictionary
<
string
,
string
>
number_to_alias_db
);
protected
abstract
void
UpdateDatabase
(
string
number
,
string
alias
);
protected
abstract
void
LoadXFERDatabase
(
ref
Dictionary
<
string
,
string
>
number_to_xfer_db
);
protected
abstract
void
UpdateDatabase
(
string
number
,
string
alias
);
protected
abstract
void
UpdateXFERDatabase
(
string
number
,
string
xfer_name
);
protected
virtual
void
ModifyRightClickMenu
(
Call
call
,
ContextMenu
menu
)
protected
virtual
void
ModifyRightClickMenu
(
Call
call
,
ContextMenu
menu
)
{
{
return
;
return
;
}
protected
virtual
void
ModifyXFERRightClickMenu
(
Call
call
,
ContextMenu
menu
)
{
return
;
}
}
protected
virtual
string
NormalizeNumber
(
string
number
)
protected
virtual
string
NormalizeNumber
(
string
number
)
{
{
...
@@ -25,13 +31,27 @@ namespace FSClient
...
@@ -25,13 +31,27 @@ namespace FSClient
}
}
protected
virtual
void
DeleteNumber
(
string
number
){
protected
virtual
void
DeleteNumber
(
string
number
){
number_to_alias
.
Remove
(
number
);
number_to_alias
.
Remove
(
number
);
}
protected
virtual
void
DeleteXFER
(
string
number
)
{
number_to_xfer
.
Remove
(
number
);
}
}
protected
virtual
bool
CanDeleteContact
(){
protected
virtual
bool
CanDeleteContact
(){
return
true
;
return
true
;
}
protected
virtual
bool
CanDeleteXFER
()
{
return
true
;
}
}
protected
virtual
string
IsValidAlias
(
String
str
)
//return null to abort updating, otherwire return string
protected
virtual
string
IsValidAlias
(
String
str
)
//return null to abort updating, otherwire return string
{
{
return
str
;
return
str
;
}
protected
virtual
string
IsValidXFERAlias
(
String
str
)
//return null to abort updating, otherwire return string
{
return
str
;
}
protected
virtual
string
IsValidXFERNumber
(
String
str
)
//return null to abort updating, otherwire return string
{
return
str
;
}
}
protected
virtual
string
DefaultEditValue
(
Call
call
)
protected
virtual
string
DefaultEditValue
(
Call
call
)
{
{
...
@@ -40,7 +60,8 @@ namespace FSClient
...
@@ -40,7 +60,8 @@ namespace FSClient
return
""
;
return
""
;
}
}
protected
Dictionary
<
string
,
string
>
number_to_alias
=
new
Dictionary
<
string
,
string
>();
protected
Dictionary
<
string
,
string
>
number_to_alias
=
new
Dictionary
<
string
,
string
>();
protected
Dictionary
<
string
,
string
>
number_to_xfer
=
new
Dictionary
<
string
,
string
>();
public
override
void
CallRightClickMenu
(
Call
call
,
ContextMenu
menu
)
{
public
override
void
CallRightClickMenu
(
Call
call
,
ContextMenu
menu
)
{
MenuItem
item
=
new
MenuItem
();
MenuItem
item
=
new
MenuItem
();
...
@@ -48,8 +69,79 @@ namespace FSClient
...
@@ -48,8 +69,79 @@ namespace FSClient
item
.
Header
=
"Edit Contact"
;
item
.
Header
=
"Edit Contact"
;
menu
.
Items
.
Add
(
item
);
menu
.
Items
.
Add
(
item
);
ModifyRightClickMenu
(
call
,
menu
);
ModifyRightClickMenu
(
call
,
menu
);
}
}
public
override
void
XFERRightClickMenu
(
Call
call
,
ContextMenu
menu
)
{
MenuItem
item
;
foreach
(
KeyValuePair
<
string
,
string
>
kvp
in
number_to_xfer
)
{
item
=
new
MenuItem
();
String
num
=
kvp
.
Key
;
item
.
MouseDoubleClick
+=
(
s
,
e
)
=>
{
menu
.
IsOpen
=
false
;
call
.
Transfer
(
num
);
};
item
.
Header
=
kvp
.
Value
+
" ("
+
num
+
")"
;
menu
.
Items
.
Add
(
item
);
MenuItem
sub_item
=
new
MenuItem
();
sub_item
.
Click
+=
(
s
,
e
)
=>
call
.
Transfer
(
num
);
sub_item
.
Header
=
"Transfer"
;
sub_item
.
DataContext
=
kvp
;
item
.
Items
.
Add
(
sub_item
);
sub_item
=
new
MenuItem
();
sub_item
.
Click
+=
edit_xfer_click
;
sub_item
.
Header
=
"Edit XFER"
;
sub_item
.
DataContext
=
kvp
;
item
.
Items
.
Add
(
sub_item
);
if
(
CanDeleteContact
())
{
sub_item
=
new
MenuItem
();
sub_item
.
Click
+=
del_xfer_click
;
sub_item
.
Header
=
"Delete XFER"
;
sub_item
.
DataContext
=
kvp
;
item
.
Items
.
Add
(
sub_item
);
}
}
item
=
new
MenuItem
();
item
.
Click
+=
add_xfer_click
;
item
.
Header
=
"Add XFER"
;
menu
.
Items
.
Add
(
item
);
ModifyXFERRightClickMenu
(
call
,
menu
);
}
private
void
add_xfer_click
(
object
sender
,
RoutedEventArgs
e
){
String
number
=
InputBox
.
GetInput
(
"Adding XFER"
,
"What number should the transfer go to?"
,
""
);
number
=
IsValidXFERNumber
(
number
);
if
(
String
.
IsNullOrWhiteSpace
(
number
))
return
;
String
alias
=
InputBox
.
GetInput
(
"Editing XFER"
,
"Edit xfer alias for number: "
+
number
,
""
);
alias
=
IsValidAlias
(
alias
);
if
(
String
.
IsNullOrWhiteSpace
(
alias
))
return
;
number_to_xfer
[
number
]
=
alias
;
UpdateXFERDatabase
(
number
,
alias
);
}
protected
void
del_xfer_click
(
object
sender
,
RoutedEventArgs
e
)
{
MenuItem
item
=
sender
as
MenuItem
;
if
(
item
==
null
)
return
;
KeyValuePair
<
string
,
string
>
kvp
=
(
KeyValuePair
<
string
,
string
>)
item
.
DataContext
;
DeleteXFER
(
kvp
.
Key
);
}
protected
void
edit_xfer_click
(
object
sender
,
RoutedEventArgs
e
)
{
MenuItem
item
=
sender
as
MenuItem
;
if
(
item
==
null
)
return
;
KeyValuePair
<
string
,
string
>
kvp
=
(
KeyValuePair
<
string
,
string
>)
item
.
DataContext
;
String
number
=
kvp
.
Key
;
String
alias
=
InputBox
.
GetInput
(
"Editing XFER"
,
"Edit xfer alias for number: "
+
number
,
kvp
.
Value
);
alias
=
IsValidAlias
(
alias
);
if
(
alias
==
null
)
return
;
number_to_xfer
[
number
]
=
alias
;
UpdateXFERDatabase
(
number
,
alias
);
}
public
override
IEnumerable
<
MenuItem
>
ContactRightClickMenu
(){
public
override
IEnumerable
<
MenuItem
>
ContactRightClickMenu
(){
List
<
MenuItem
>
items
=
new
List
<
MenuItem
>();
List
<
MenuItem
>
items
=
new
List
<
MenuItem
>();
MenuItem
item
=
new
MenuItem
();
MenuItem
item
=
new
MenuItem
();
...
@@ -181,8 +273,8 @@ namespace FSClient
...
@@ -181,8 +273,8 @@ namespace FSClient
}
}
public
override
void
Initialize
()
public
override
void
Initialize
()
{
{
LoadDatabase
(
ref
number_to_alias
);
LoadDatabase
(
ref
number_to_alias
);
LoadXFERDatabase
(
ref
number_to_xfer
);
refresh_search_box
();
refresh_search_box
();
}
}
protected
void
refresh_search_box
(){
protected
void
refresh_search_box
(){
...
...
mitchcapper/FSClient/SimpleXmlContactPlugin/SimpleXmlContactPlugin.cs
浏览文件 @
0b3959e6
...
@@ -63,7 +63,8 @@ namespace SimpleXmlContactPlugin {
...
@@ -63,7 +63,8 @@ namespace SimpleXmlContactPlugin {
}
}
private
XmlDictionary
<
string
,
string
>
number_to_alias_ref
;
private
XmlDictionary
<
string
,
string
>
number_to_alias_ref
;
private
XmlDictionary
<
string
,
string
>
number_to_xfer_ref
;
protected
override
void
LoadDatabase
(
ref
Dictionary
<
string
,
string
>
number_to_alias_db
)
//alright so we hijack the database to convert it to be serializeable
protected
override
void
LoadDatabase
(
ref
Dictionary
<
string
,
string
>
number_to_alias_db
)
//alright so we hijack the database to convert it to be serializeable
{
{
number_to_alias_ref
=
new
XmlDictionary
<
string
,
string
>();
number_to_alias_ref
=
new
XmlDictionary
<
string
,
string
>();
...
@@ -73,7 +74,19 @@ namespace SimpleXmlContactPlugin {
...
@@ -73,7 +74,19 @@ namespace SimpleXmlContactPlugin {
}
}
}
catch
{}
}
catch
{}
number_to_alias_db
=
number_to_alias_ref
;
number_to_alias_db
=
number_to_alias_ref
;
}
}
protected
override
void
LoadXFERDatabase
(
ref
Dictionary
<
string
,
string
>
number_to_xfer_db
){
number_to_xfer_ref
=
new
XmlDictionary
<
string
,
string
>();
try
{
using
(
FileStream
ReadFileStream
=
new
FileStream
(
Utils
.
GetUserDataPath
()
+
"\\SimpleXmlContactsXFER.xml"
,
FileMode
.
Open
,
FileAccess
.
Read
,
FileShare
.
Read
))
{
number_to_xfer_ref
=
(
XmlDictionary
<
string
,
string
>)
SerializerObj
.
Deserialize
(
ReadFileStream
);
}
}
catch
{
}
number_to_xfer_db
=
number_to_xfer_ref
;
}
public
override
void
Terminate
()
public
override
void
Terminate
()
{
{
...
@@ -89,6 +102,20 @@ namespace SimpleXmlContactPlugin {
...
@@ -89,6 +102,20 @@ namespace SimpleXmlContactPlugin {
protected
override
void
UpdateDatabase
(
string
number
,
string
alias
){
protected
override
void
UpdateDatabase
(
string
number
,
string
alias
){
SaveDatabase
();
SaveDatabase
();
}
}
protected
override
void
UpdateXFERDatabase
(
string
number
,
string
xfer_name
){
SaveXFERDatabase
();
}
private
void
SaveXFERDatabase
(){
TextWriter
WriteFileStream
=
new
StreamWriter
(
Utils
.
GetUserDataPath
()
+
"\\SimpleXmlContactsXFER.xml"
);
SerializerObj
.
Serialize
(
WriteFileStream
,
number_to_xfer_ref
);
WriteFileStream
.
Close
();
}
protected
override
void
DeleteXFER
(
string
number
)
{
base
.
DeleteXFER
(
number
);
SaveDatabase
();
}
protected
override
void
DeleteNumber
(
string
number
)
{
protected
override
void
DeleteNumber
(
string
number
)
{
base
.
DeleteNumber
(
number
);
base
.
DeleteNumber
(
number
);
SaveDatabase
();
SaveDatabase
();
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论