提交 0b3959e6 authored 作者: Mitch Capper's avatar Mitch Capper

Added XFER aliases also (right click on xfer button) through contact plugin

上级 10905328
...@@ -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;
......
...@@ -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);
......
...@@ -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) {
......
...@@ -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) {
......
...@@ -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(){
......
...@@ -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 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论