public void RegisterWithServer(EnhancedImageServer server) { // We could probably get away with using the server thread here, but the code interacts quite a bit with the // current book and other state. server.RegisterEndpointHandler("pageTemplates", HandleTemplatesRequest, true); // Being on the UI thread causes a deadlock on Linux/Mono. See https://silbloom.myjetbrains.com/youtrack/issue/BL-3818. server.RegisterEndpointHandler("pageTemplateThumbnail", HandleThumbnailRequest, false); }
public static string GetString(EnhancedImageServer server, string endPoint, string query = "", ContentType returnType = ContentType.Text, EndpointHandler handler = null, string endOfUrlForTest = null) { if (handler != null) { server.RegisterEndpointHandler(endPoint, handler, true); } server.StartListening(); var client = new WebClientWithTimeout { Timeout = 3000, }; client.Headers[HttpRequestHeader.ContentType] = returnType == ContentType.Text ? "text/plain" : "application/json"; if (endOfUrlForTest != null) { return(client.DownloadString(ServerBase.ServerUrlWithBloomPrefixEndingInSlash + "api/" + endOfUrlForTest)); } else { if (!string.IsNullOrEmpty(query)) { query = "?" + query; } return(client.DownloadString(ServerBase.ServerUrlWithBloomPrefixEndingInSlash + "api/" + endPoint + query)); } }
public static void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler("help/.*", (request) => { var topic = request.LocalPath().Replace("api/help", ""); Show(Application.OpenForms.Cast <Form>().Last(), topic); //if this is called from a simple html anchor, we don't want the browser to do anything request.ExternalLinkSucceeded(); }, true); // opening a form, definitely UI thread }
public static void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler("help/.*", (request) => { var topic = request.LocalPath().ToLowerInvariant().Replace("api/help", ""); Show(Application.OpenForms.Cast <Form>().Last(), topic); //if this is called from a simple html anchor, we don't want the browser to do anything request.SucceededDoNotNavigate(); }); }
public void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler("audio/startRecord", HandleStartRecording); server.RegisterEndpointHandler("audio/endRecord", HandleEndRecord); server.RegisterEndpointHandler("audio/enableListenButton", HandleEnableListenButton); server.RegisterEndpointHandler("audio/deleteSegment", HandleDeleteSegment); server.RegisterEndpointHandler("audio/currentRecordingDevice", HandleCurrentRecordingDevice); server.RegisterEndpointHandler("audio/checkForSegment", HandleCheckForSegment); server.RegisterEndpointHandler("audio/devices", HandleAudioDevices); Debug.Assert(ServerBase.portForHttp > 0, "Need the server to be listening before this can be registered (BL-3337)."); }
public void RegisterWithServer(EnhancedImageServer server) { // I don't know for sure that these need to be on the UI thread, but that was the old default so keeping it for safety. server.RegisterEndpointHandler("audio/startRecord", HandleStartRecording, true); server.RegisterEndpointHandler("audio/endRecord", HandleEndRecord, true); server.RegisterEndpointHandler("audio/enableListenButton", HandleEnableListenButton, true); server.RegisterEndpointHandler("audio/deleteSegment", HandleDeleteSegment, true); server.RegisterEndpointHandler("audio/currentRecordingDevice", HandleCurrentRecordingDevice, true); server.RegisterEndpointHandler("audio/checkForSegment", HandleCheckForSegment, true); server.RegisterEndpointHandler("audio/devices", HandleAudioDevices, true); Debug.Assert(ServerBase.portForHttp > 0, "Need the server to be listening before this can be registered (BL-3337)."); }
public static string PostString(EnhancedImageServer server, string endPoint, string data, ContentType returnType, EndpointHandler handler = null) { if (handler != null) { server.RegisterEndpointHandler(endPoint, handler, true); } server.StartListening(); var client = new WebClientWithTimeout { Timeout = 3000 }; client.Headers[HttpRequestHeader.ContentType] = returnType == ContentType.Text ? "text/plain" : "application/json"; return(client.UploadString(ServerBase.ServerUrlWithBloomPrefixEndingInSlash + "api/" + endPoint, "POST", data)); }
public void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler("keyboarding/useLongpress", (ApiRequest request) => { try { //detect if some keyboarding system is active, e.g. KeyMan. If it is, don't enable LongPress var form = Application.OpenForms.Cast <Form>().Last(); request.ReplyWithText(SIL.Windows.Forms.Keyboarding.KeyboardController.IsFormUsingInputProcessor(form) ? "false" : "true"); } catch (Exception error) { request.ReplyWithText("true"); // This is arbitrary. I don't know if it's better to assume keyman, or not. NonFatalProblem.Report(ModalIf.None, PassiveIf.All, "Error checking for keyman", "", error); } }, handleOnUiThread: false); }
public void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler("addPage", HandleAddPage); server.RegisterEndpointHandler("changeLayout", HandleChangeLayout); }
public static void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler("toolbox/settings", HandleSettings, false); }
public void RegisterWithServer(EnhancedImageServer server) { // These are both just retrieving information about files, apart from using _bookSelection.CurrentSelection.FolderPath. server.RegisterEndpointHandler("image/info", HandleImageInfo, false); server.RegisterEndpointHandler("image/imageCreditsForWholeBook", HandleCopyImageCreditsForWholeBook, false); }
public void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler("image/info", HandleImageInfo); server.RegisterEndpointHandler("image/imageCreditsForWholeBook", HandleCopyImageCreditsForWholeBook); }
public void RegisterWithServer(EnhancedImageServer server) { // This is just for storing the user preference of method // If we had a couple of these, we could just have a generic preferences api // that browser-side code could use. server.RegisterEndpointHandler(kApiUrlPart + "method", request => { if (request.HttpMethod == HttpMethods.Get) { var method = Settings.Default.PublishAndroidMethod; if (!new string[] { "wifi", "usb", "file" }.Contains(method)) { method = "wifi"; } request.ReplyWithText(method); } else // post { Settings.Default.PublishAndroidMethod = request.RequiredPostString(); #if __MonoCS__ if (Settings.Default.PublishAndroidMethod == "usb") { _progress.MessageWithoutLocalizing("Sorry, this method is not available on Linux yet."); } #endif request.PostSucceeded(); } }, true); server.RegisterEndpointHandler(kApiUrlPart + "backColor", request => { if (request.HttpMethod == HttpMethods.Get) { if (request.CurrentBook != _coverColorSourceBook) { _coverColorSourceBook = request.CurrentBook; TryCssColorFromString(request.CurrentBook?.GetCoverColor() ?? "", out _thumbnailBackgroundColor); } request.ReplyWithText(ToCssColorString(_thumbnailBackgroundColor)); } else // post { // ignore invalid colors (very common while user is editing hex) Color newColor; var newColorAsString = request.RequiredPostString(); if (TryCssColorFromString(newColorAsString, out newColor)) { _thumbnailBackgroundColor = newColor; request.CurrentBook.SetCoverColor(newColorAsString); } request.PostSucceeded(); } }, true); server.RegisterEndpointHandler(kApiUrlPart + "photoStoryMode", request => { if (request.HttpMethod == HttpMethods.Get) { // this is temporary, just trying to get support for full screen pan & zoom out quickly in 4.2 request.ReplyWithText(request.CurrentBook.UsePhotoStoryModeInBloomReader.ToString() .ToLowerInvariant()); // "false", not "False" } else // post { request.CurrentBook.UsePhotoStoryModeInBloomReader = bool.Parse(request.RequiredPostString()); request.PostSucceeded(); } }, true); server.RegisterEndpointHandler(kApiUrlPart + "thumbnail", request => { var coverImage = request.CurrentBook.GetCoverImagePath(); if (coverImage == null) { request.Failed("no cover image"); } else { // We don't care as much about making it resized as making its background transparent. using (var thumbnail = TempFile.CreateAndGetPathButDontMakeTheFile()) { if (_thumbnailBackgroundColor == Color.Transparent) { TryCssColorFromString(request.CurrentBook?.GetCoverColor(), out _thumbnailBackgroundColor); } RuntimeImageProcessor.GenerateEBookThumbnail(coverImage, thumbnail.Path, 256, 256, _thumbnailBackgroundColor); request.ReplyWithImage(thumbnail.Path); } } }, true); server.RegisterEndpointHandler(kApiUrlPart + "usb/start", request => { #if !__MonoCS__ SetState("UsbStarted"); _usbPublisher.Connect(request.CurrentBook, _thumbnailBackgroundColor); #endif request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "usb/stop", request => { #if !__MonoCS__ _usbPublisher.Stop(); SetState("stopped"); #endif request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "wifi/start", request => { _wifiPublisher.Start(request.CurrentBook, request.CurrentCollectionSettings, _thumbnailBackgroundColor); SetState("ServingOnWifi"); request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "wifi/stop", request => { _wifiPublisher.Stop(); SetState("stopped"); request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "file/save", request => { FilePublisher.Save(request.CurrentBook, _bookServer, _thumbnailBackgroundColor, _progress); SetState("stopped"); request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "cleanup", request => { Stop(); request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "textToClipboard", request => { PortableClipboard.SetText(request.RequiredPostString()); request.PostSucceeded(); }, true); }
public void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler(kApiUrlPart + "requestState", request => { if (request.HttpMethod == HttpMethods.Get) { request.ReplyWithJson(CurrentStateString); } else // post { Debug.Fail("We shouldn't ever be using the 'post' version."); request.PostSucceeded(); } }, true); server.RegisterEndpointHandler(kApiUrlPart + "addPage", request => { AddPageButton_Click(); request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "duplicatePage", request => { _editingModel.OnDuplicatePage(); request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "deletePage", request => { if (ConfirmRemovePageDialog.Confirm()) { _editingModel.OnDeletePage(); } request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "lockBook", request => { _editingModel.SaveNow(); // BL-5421 lock and unlock lose typing _editingModel.CurrentBook.TemporarilyUnlocked = false; request.PostSucceeded(); UpdateState(); // because we aren't selecting a new page _editingModel.RefreshDisplayOfCurrentPage(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "unlockBook", request => { _editingModel.SaveNow(); // BL-5421 lock and unlock lose typing _editingModel.CurrentBook.TemporarilyUnlocked = true; request.PostSucceeded(); UpdateState(); // because we aren't selecting a new page _editingModel.RefreshDisplayOfCurrentPage(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "cleanup", request => { SendCleanupState(); request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "zoomMinus", request => { _editingModel.AdjustPageZoom(-10); request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "zoomPlus", request => { _editingModel.AdjustPageZoom(10); request.PostSucceeded(); }, true); server.RegisterEndpointHandler(kApiUrlPart + "requestVideoPlaceHolder", request => { _editingModel.RequestVideoPlaceHolder(); request.PostSucceeded(); }, true); }
public void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler("pageTemplates", HandleTemplatesRequest); // Being on the UI thread causes a deadlock on Linux/Mono. See https://silbloom.myjetbrains.com/youtrack/issue/BL-3818. server.RegisterEndpointHandler("pageTemplateThumbnail", HandleThumbnailRequest, false); }
public void RegisterWithServer(EnhancedImageServer server) { // Both of these display UI, expect to require UI thread. server.RegisterEndpointHandler("addPage", HandleAddPage, true); server.RegisterEndpointHandler("changeLayout", HandleChangeLayout, true); }
public void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler("music/ui/chooseFile", HandleRequest, true); }
public void RegisterWithServer(EnhancedImageServer server) { server.RegisterEndpointHandler("toolbox/enabledTools", HandleEnabledToolsRequest, true); }