提交 143ee26d 编写于 作者: yanghye's avatar yanghye

优化自定义扩展chromium回调事件, 增加IBrowserWindow参数,可以在回调函数中直接取当前窗口

上级 e33d7341
......@@ -36,19 +36,19 @@ type BrowserEvent struct {
onBeforePopup chromiumEventOnBeforePopupEx //default
onDragEnter chromiumEventOnDragEnterEx //default
onDraggableRegionsChanged chromiumEventOnDraggableRegionsChangedEx //default
onLoadEnd chromiumEventOnLoadEnd //default
onLoadEnd chromiumEventOnLoadEndEx //default
onAfterCreated chromiumEventOnAfterCreatedEx //default
onBeforeBrowser chromiumEventOnBeforeBrowserEx //default
onBeforeClose chromiumEventOnBeforeCloseEx //default
onClose chromiumEventOnCloseEx //default
onMainFrameChanged chromiumEventOnMainFrameChangedEx //default
onBeforeDownload chromiumEventOnBeforeDownload //default can cover
onBeforeDownload chromiumEventOnBeforeDownloadEx //default can cover
onKeyEvent chromiumEventOnKeyEventEx //default can cover
onProcessMessageReceived BrowseProcessMessageReceived //default
onProcessMessageReceived BrowseProcessMessageReceivedEx //default
onTitleChange chromiumEventOnTitleChangeEx //default
onContextMenuCommand chromiumEventOnContextMenuCommand //default can cover
onContextMenuCommand chromiumEventOnContextMenuCommandEx //default can cover
onBeforeContextMenu chromiumEventOnBeforeContextMenuEx //default can cover
onBeforeResourceLoad chromiumEventOnBeforeResourceLoad //default
onBeforeResourceLoad chromiumEventOnBeforeResourceLoadEx //default
onRenderCompMsg chromiumEventOnCompMsg //default windows
onGetResourceHandler chromiumEventOnGetResourceHandlerEx //default
}
......@@ -240,14 +240,14 @@ func (m *BrowserEvent) SetOnLoadError(event chromiumEventOnLoadError) {
}
// SetOnLoadEnd
func (m *BrowserEvent) SetOnLoadEnd(event chromiumEventOnLoadEnd) {
func (m *BrowserEvent) SetOnLoadEnd(event chromiumEventOnLoadEndEx) {
if Args.IsMain() {
m.onLoadEnd = event
}
}
// SetOnBeforeDownload
func (m *BrowserEvent) SetOnBeforeDownload(event chromiumEventOnBeforeDownload) {
func (m *BrowserEvent) SetOnBeforeDownload(event chromiumEventOnBeforeDownloadEx) {
if Args.IsMain() {
m.onBeforeDownload = event
}
......@@ -297,7 +297,7 @@ func (m *BrowserEvent) SetOnGetResourceHandler(event chromiumEventOnGetResourceH
m.onGetResourceHandler = event
} else {
m.ChromiumEvent().SetOnGetResourceHandler(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest) (resourceHandler *ICefResourceHandler) {
resourceHandler, _ = event(sender, browser, frame, request)
resourceHandler, _ = event(sender, browser, frame, request, nil)
return
})
}
......@@ -344,14 +344,14 @@ func (m *BrowserEvent) SetOnScrollOffsetChanged(event chromiumEventOnScrollOffse
}
// SetOnBrowseProcessMessageReceived
func (m *BrowserEvent) SetOnBrowseProcessMessageReceived(event BrowseProcessMessageReceived) {
func (m *BrowserEvent) SetOnBrowseProcessMessageReceived(event BrowseProcessMessageReceivedEx) {
if Args.IsMain() {
m.onProcessMessageReceived = event
}
}
// SetOnBeforeResourceLoad
func (m *BrowserEvent) SetOnBeforeResourceLoad(event chromiumEventOnBeforeResourceLoad) {
func (m *BrowserEvent) SetOnBeforeResourceLoad(event chromiumEventOnBeforeResourceLoadEx) {
if Args.IsMain() {
m.onBeforeResourceLoad = event
}
......@@ -421,7 +421,7 @@ func (m *BrowserEvent) SetOnBeforeContextMenu(event chromiumEventOnBeforeContext
}
// SetOnContextMenuCommand
func (m *BrowserEvent) SetOnContextMenuCommand(event chromiumEventOnContextMenuCommand) {
func (m *BrowserEvent) SetOnContextMenuCommand(event chromiumEventOnContextMenuCommandEx) {
if Args.IsMain() {
m.onContextMenuCommand = event
}
......
......@@ -823,7 +823,7 @@ func (m *LCLBrowserWindow) registerDefaultEvent() {
defaultAcceleratorCustom()
m.Chromium().SetOnProcessMessageReceived(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, sourceProcess consts.CefProcessId, message *ICefProcessMessage) bool {
if bwEvent.onProcessMessageReceived != nil {
return bwEvent.onProcessMessageReceived(sender, browser, frame, sourceProcess, message)
return bwEvent.onProcessMessageReceived(sender, browser, frame, sourceProcess, message, m)
}
return false
})
......@@ -832,13 +832,13 @@ func (m *LCLBrowserWindow) registerDefaultEvent() {
request.SetHeaderByName(assetserve.AssetsServerHeaderKeyName, assetserve.AssetsServerHeaderKeyValue, true)
}
if bwEvent.onBeforeResourceLoad != nil {
bwEvent.onBeforeResourceLoad(sender, browser, frame, request, callback, result)
bwEvent.onBeforeResourceLoad(sender, browser, frame, request, callback, result, m)
}
})
//事件可以被覆盖
m.Chromium().SetOnBeforeDownload(func(sender lcl.IObject, browser *ICefBrowser, beforeDownloadItem *ICefDownloadItem, suggestedName string, callback *ICefBeforeDownloadCallback) {
if bwEvent.onBeforeDownload != nil {
bwEvent.onBeforeDownload(sender, browser, beforeDownloadItem, suggestedName, callback)
bwEvent.onBeforeDownload(sender, browser, beforeDownloadItem, suggestedName, callback, m)
} else {
callback.Cont(consts.ExePath+consts.Separator+suggestedName, true)
}
......@@ -846,24 +846,26 @@ func (m *LCLBrowserWindow) registerDefaultEvent() {
m.Chromium().SetOnBeforeContextMenu(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, model *ICefMenuModel) {
var flag bool
if bwEvent.onBeforeContextMenu != nil {
flag = bwEvent.onBeforeContextMenu(sender, browser, frame, params, model)
flag = bwEvent.onBeforeContextMenu(sender, browser, frame, params, model, m)
}
if !flag {
chromiumOnBeforeContextMenu(m, browser, frame, params, model)
}
})
m.Chromium().SetOnContextMenuCommand(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, commandId consts.MenuId, eventFlags uint32, result *bool) {
m.Chromium().SetOnContextMenuCommand(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, commandId consts.MenuId, eventFlags uint32) bool {
var result bool
if bwEvent.onContextMenuCommand != nil {
bwEvent.onContextMenuCommand(sender, browser, frame, params, commandId, eventFlags, result)
result = bwEvent.onContextMenuCommand(sender, browser, frame, params, commandId, eventFlags, m)
}
if !*result {
chromiumOnContextMenuCommand(m, browser, frame, params, commandId, eventFlags, result)
if !result {
result = chromiumOnContextMenuCommand(m, browser, frame, params, commandId, eventFlags)
}
return result
})
m.Chromium().SetOnAfterCreated(func(sender lcl.IObject, browser *ICefBrowser) {
var flag bool
if bwEvent.onAfterCreated != nil {
flag = bwEvent.onAfterCreated(sender, browser)
flag = bwEvent.onAfterCreated(sender, browser, m)
}
if !flag {
chromiumOnAfterCreate(m, browser)
......@@ -912,7 +914,7 @@ func (m *LCLBrowserWindow) registerDefaultEvent() {
})
m.Chromium().SetOnLoadEnd(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, httpStatusCode int32) {
if bwEvent.onLoadEnd != nil {
bwEvent.onLoadEnd(sender, browser, frame, httpStatusCode)
bwEvent.onLoadEnd(sender, browser, frame, httpStatusCode, m)
}
})
if m.WindowProperty().EnableWebkitAppRegion {
......@@ -928,7 +930,7 @@ func (m *LCLBrowserWindow) registerDefaultEvent() {
m.Chromium().SetOnGetResourceHandler(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest) (resourceHandler *ICefResourceHandler) {
//var flag bool
if bwEvent.onGetResourceHandler != nil {
resourceHandler, _ = bwEvent.onGetResourceHandler(sender, browser, frame, request)
resourceHandler, _ = bwEvent.onGetResourceHandler(sender, browser, frame, request, m)
}
//if !flag {
// resourceHandler = localLoadRes.getResourceHandler(browser, frame, request)
......
......@@ -259,7 +259,7 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
defaultAcceleratorCustom()
m.chromium.SetOnProcessMessageReceived(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, sourceProcess consts.CefProcessId, message *ICefProcessMessage) bool {
if bwEvent.onProcessMessageReceived != nil {
return bwEvent.onProcessMessageReceived(sender, browser, frame, sourceProcess, message)
return bwEvent.onProcessMessageReceived(sender, browser, frame, sourceProcess, message, m)
}
return false
})
......@@ -268,12 +268,12 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
request.SetHeaderByName(assetserve.AssetsServerHeaderKeyName, assetserve.AssetsServerHeaderKeyValue, true)
}
if bwEvent.onBeforeResourceLoad != nil {
bwEvent.onBeforeResourceLoad(sender, browser, frame, request, callback, result)
bwEvent.onBeforeResourceLoad(sender, browser, frame, request, callback, result, m)
}
})
m.chromium.SetOnBeforeDownload(func(sender lcl.IObject, browser *ICefBrowser, beforeDownloadItem *ICefDownloadItem, suggestedName string, callback *ICefBeforeDownloadCallback) {
if bwEvent.onBeforeDownload != nil {
bwEvent.onBeforeDownload(sender, browser, beforeDownloadItem, suggestedName, callback)
bwEvent.onBeforeDownload(sender, browser, beforeDownloadItem, suggestedName, callback, m)
} else {
callback.Cont(consts.ExePath+consts.Separator+suggestedName, true)
}
......@@ -281,24 +281,26 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
m.chromium.SetOnBeforeContextMenu(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, model *ICefMenuModel) {
var flag bool
if bwEvent.onBeforeContextMenu != nil {
flag = bwEvent.onBeforeContextMenu(sender, browser, frame, params, model)
flag = bwEvent.onBeforeContextMenu(sender, browser, frame, params, model, m)
}
if !flag {
chromiumOnBeforeContextMenu(m, browser, frame, params, model)
}
})
m.chromium.SetOnContextMenuCommand(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, commandId consts.MenuId, eventFlags uint32, result *bool) {
m.chromium.SetOnContextMenuCommand(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, commandId consts.MenuId, eventFlags uint32) bool {
var result bool
if bwEvent.onContextMenuCommand != nil {
bwEvent.onContextMenuCommand(sender, browser, frame, params, commandId, eventFlags, result)
result = bwEvent.onContextMenuCommand(sender, browser, frame, params, commandId, eventFlags, m)
}
if !*result {
chromiumOnContextMenuCommand(m, browser, frame, params, commandId, eventFlags, result)
if !result {
result = chromiumOnContextMenuCommand(m, browser, frame, params, commandId, eventFlags)
}
return result
})
m.chromium.SetOnAfterCreated(func(sender lcl.IObject, browser *ICefBrowser) {
var flag bool
if bwEvent.onAfterCreated != nil {
flag = bwEvent.onAfterCreated(sender, browser)
flag = bwEvent.onAfterCreated(sender, browser, m)
}
if !flag {
chromiumOnAfterCreate(m, browser)
......@@ -345,7 +347,7 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
})
m.chromium.SetOnLoadEnd(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, httpStatusCode int32) {
if bwEvent.onLoadEnd != nil {
bwEvent.onLoadEnd(sender, browser, frame, httpStatusCode)
bwEvent.onLoadEnd(sender, browser, frame, httpStatusCode, m)
}
})
if m.WindowProperty().EnableWebkitAppRegion {
......@@ -361,7 +363,7 @@ func (m *ViewsFrameworkBrowserWindow) registerDefaultEvent() {
m.Chromium().SetOnGetResourceHandler(func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest) (resourceHandler *ICefResourceHandler) {
//var flag bool
if bwEvent.onGetResourceHandler != nil {
resourceHandler, _ = bwEvent.onGetResourceHandler(sender, browser, frame, request)
resourceHandler, _ = bwEvent.onGetResourceHandler(sender, browser, frame, request, m)
}
//if !flag {
// resourceHandler = localLoadRes.getResourceHandler(browser, frame, request)
......
......@@ -285,14 +285,13 @@ func chromiumOnBeforeContextMenu(window IBrowserWindow, browser *ICefBrowser, fr
}
// chromiumOnContextMenuCommand 右键菜单 - 默认实现
func chromiumOnContextMenuCommand(window IBrowserWindow, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, commandId consts.MenuId, eventFlags uint32, result *bool) {
func chromiumOnContextMenuCommand(window IBrowserWindow, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, commandId consts.MenuId, eventFlags uint32) bool {
browserId := browser.Identifier()
defer func() {
if err := recover(); err != nil {
logger.Error("OnContextMenuCommand Error:", err, "browserId:", browserId)
}
}()
*result = true
if commandId == backId {
browser.GoBack()
} else if commandId == forwardId {
......@@ -322,7 +321,7 @@ func chromiumOnContextMenuCommand(window IBrowserWindow, browser *ICefBrowser, f
} else if commandId == imageSaveId {
browser.StartDownload(params.SourceUrl())
}
*result = true
return true
}
// chromiumOnBeforePopup 弹出窗口
......
......@@ -685,7 +685,7 @@ func init() {
eventFlags := uint32(getVal(5))
result := (*bool)(getPtr(6))
if !KeyAccelerator.commandIdEventCallback(browse, commandId, params, eventFlags, result) {
fn.(chromiumEventOnContextMenuCommand)(lcl.AsObject(sender), browse, frame, params, commandId, eventFlags, result)
*result = fn.(chromiumEventOnContextMenuCommand)(lcl.AsObject(sender), browse, frame, params, commandId, eventFlags)
}
params.Free()
case chromiumEventOnContextMenuDismissed:
......
......@@ -65,7 +65,7 @@ type chromiumEventOnFileDialog func(sender lcl.IObject, browser *ICefBrowser, mo
type chromiumEventOnGetAccessibilityHandler func(sender lcl.IObject, accessibilityHandler *ICefAccessibilityHandler)
type chromiumEventOnGetAudioParameters func(sender lcl.IObject, browser *ICefBrowser, params *TCefAudioParameters) bool
type chromiumEventOnGetResourceHandler func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest) (resourceHandler *ICefResourceHandler)
type chromiumEventOnGetResourceHandlerEx func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest) (resourceHandler *ICefResourceHandler, result bool)
type chromiumEventOnGetResourceHandlerEx func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest, window IBrowserWindow) (resourceHandler *ICefResourceHandler, result bool)
type chromiumEventOnGetResourceRequestHandlerReqCtxHdlr func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest, isNavigation, isDownload bool, requestInitiator string) (disableDefaultHandling bool, resourceRequestHandler *ICefResourceRequestHandler)
type chromiumEventOnGetResourceRequestHandlerReqHdlr func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest, isNavigation, isDownload bool, requestInitiator string) (disableDefaultHandling bool, resourceRequestHandler *ICefResourceRequestHandler)
type chromiumEventOnGetResourceResponseFilter func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest, response *ICefResponse) (responseFilter *ICefResponseFilter)
......@@ -123,7 +123,7 @@ type chromiumEventOnTitleChangeEx func(sender lcl.IObject, browser *ICefBrowser,
type chromiumEventOnRenderProcessTerminated func(sender lcl.IObject, browser *ICefBrowser, status consts.TCefTerminationStatus)
type chromiumEventOnCompMsg func(sender lcl.IObject, message *types.TMessage, lResult *types.LRESULT, aHandled *bool)
type chromiumEventOnAfterCreated func(sender lcl.IObject, browser *ICefBrowser)
type chromiumEventOnAfterCreatedEx func(sender lcl.IObject, browser *ICefBrowser) bool
type chromiumEventOnAfterCreatedEx func(sender lcl.IObject, browser *ICefBrowser, window IBrowserWindow) bool
type chromiumEventOnBeforeClose func(sender lcl.IObject, browser *ICefBrowser)
type chromiumEventOnBeforeCloseEx func(sender lcl.IObject, browser *ICefBrowser, window IBrowserWindow) bool
type chromiumEventOnClose func(sender lcl.IObject, browser *ICefBrowser, aAction *consts.TCefCloseBrowserAction)
......@@ -134,21 +134,25 @@ type chromiumEventOnLoadingStateChange func(sender lcl.IObject, browser *ICefBro
type chromiumEventOnLoadingProgressChange func(sender lcl.IObject, browser *ICefBrowser, progress float64)
type chromiumEventOnLoadError func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, errorCode consts.CEF_NET_ERROR, errorText, failedUrl string)
type chromiumEventOnLoadEnd func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, httpStatusCode int32)
type chromiumEventOnLoadEndEx func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, httpStatusCode int32, window IBrowserWindow)
type chromiumEventOnCookieSet func(sender lcl.IObject, success bool, ID int32)
type chromiumEventOnCookiesDeleted func(sender lcl.IObject, numDeleted int32)
type chromiumEventOnCookiesFlushed func(sender lcl.IObject)
type chromiumEventOnCookiesVisited func(sender lcl.IObject, cookie *ICefCookie)
type chromiumEventOnCookieVisitorDestroyed func(sender lcl.IObject, ID int32)
type chromiumEventOnBeforeContextMenu func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, model *ICefMenuModel)
type chromiumEventOnBeforeContextMenuEx func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, model *ICefMenuModel) bool
type chromiumEventOnContextMenuCommand func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, commandId consts.MenuId, eventFlags uint32, result *bool)
type chromiumEventOnBeforeContextMenuEx func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, model *ICefMenuModel, window IBrowserWindow) bool
type chromiumEventOnContextMenuCommand func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, commandId consts.MenuId, eventFlags uint32) bool
type chromiumEventOnContextMenuCommandEx func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, params *ICefContextMenuParams, commandId consts.MenuId, eventFlags uint32, window IBrowserWindow) bool
type chromiumEventOnContextMenuDismissed func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame)
type chromiumEventOnFullScreenModeChange func(sender lcl.IObject, browser *ICefBrowser, fullscreen bool)
type chromiumEventOnBeforeDownload func(sender lcl.IObject, browser *ICefBrowser, downloadItem *ICefDownloadItem, suggestedName string, callback *ICefBeforeDownloadCallback)
type chromiumEventOnBeforeDownloadEx func(sender lcl.IObject, browser *ICefBrowser, downloadItem *ICefDownloadItem, suggestedName string, callback *ICefBeforeDownloadCallback, window IBrowserWindow)
type chromiumEventOnDownloadUpdated func(sender lcl.IObject, browser *ICefBrowser, downloadItem *ICefDownloadItem, callback *ICefDownloadItemCallback)
type chromiumEventOnKeyEvent func(sender lcl.IObject, browser *ICefBrowser, event *TCefKeyEvent, osEvent *consts.TCefEventHandle, result *bool)
type chromiumEventOnKeyEventEx func(sender lcl.IObject, browser *ICefBrowser, event *TCefKeyEvent, osEvent *consts.TCefEventHandle, window IBrowserWindow, result *bool)
type chromiumEventOnBeforeResourceLoad func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest, callback *ICefCallback, result *consts.TCefReturnValue)
type chromiumEventOnBeforeResourceLoadEx func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest, callback *ICefCallback, result *consts.TCefReturnValue, window IBrowserWindow)
type chromiumEventOnResourceResponse func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest, response *ICefResponse, result *bool)
type chromiumEventOnResourceRedirect func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest, response *ICefResponse, newUrl *string)
type chromiumEventOnResourceLoadComplete func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, request *ICefRequest, response *ICefResponse, status consts.TCefUrlRequestStatus, receivedContentLength int64)
......@@ -170,6 +174,7 @@ type chromiumEventOnGetAuthCredentials func(sender lcl.IObject, browser *ICefBro
/************* ProcessMessageReceived *************/
type BrowseProcessMessageReceived func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, sourceProcess consts.CefProcessId, message *ICefProcessMessage) bool
type BrowseProcessMessageReceivedEx func(sender lcl.IObject, browser *ICefBrowser, frame *ICefFrame, sourceProcess consts.CefProcessId, message *ICefProcessMessage, window IBrowserWindow) bool
type RenderProcessMessageReceived func(browser *ICefBrowser, frame *ICefFrame, sourceProcess consts.CefProcessId, message *ICefProcessMessage) bool
/************* TCEFApplication *************/
......
......@@ -133,7 +133,7 @@ func (m *LocalLoadResource) loadDefaultURL(window IBrowserWindow, browser *ICefB
if localLoadRes.enable() {
var homeURL string
if BrowserWindow.Config.Url != defaultAboutBlank {
homeURL = BrowserWindow.Config.Url
homeURL = window.WindowProperty().Url
} else {
defaultURL := new(bytes.Buffer)
defaultURL.WriteString(m.Scheme)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册