()
| 711 | } |
| 712 | |
| 713 | export function SettingsComponent() { |
| 714 | const update = useForceUpdater(); |
| 715 | const { store } = settings; |
| 716 | const sharexFileInputRef = React.useRef<HTMLInputElement>(null); |
| 717 | const isNest = store.serviceType === ServiceType.NEST; |
| 718 | const isEzHost = store.serviceType === ServiceType.EZHOST; |
| 719 | const isEncryptingHost = store.serviceType === ServiceType.ENCRYPTINGHOST; |
| 720 | const isS3 = store.serviceType === ServiceType.S3; |
| 721 | const isZipline = store.serviceType === ServiceType.ZIPLINE; |
| 722 | const isCatbox = store.serviceType === ServiceType.CATBOX; |
| 723 | const isLitterbox = store.serviceType === ServiceType.LITTERBOX; |
| 724 | const isGofile = store.serviceType === ServiceType.GOFILE; |
| 725 | const isPixelVault = store.serviceType === ServiceType.PIXELVAULT; |
| 726 | const isPixelDrain = store.serviceType === ServiceType.PIXELDRAIN; |
| 727 | const isShareX = store.serviceType === ServiceType.SHAREX; |
| 728 | const isWebdav = store.serviceType === ServiceType.WEBDAV; |
| 729 | |
| 730 | const validateShareXConfig = () => { |
| 731 | try { |
| 732 | parseShareXConfig(store.sharexConfig || ""); |
| 733 | showToast("ShareX config is valid", Toasts.Type.SUCCESS); |
| 734 | } catch (error) { |
| 735 | const message = error instanceof Error ? error.message : "Invalid ShareX config"; |
| 736 | showToast(message, Toasts.Type.FAILURE); |
| 737 | } |
| 738 | }; |
| 739 | |
| 740 | const triggerShareXFileUpload = () => { |
| 741 | sharexFileInputRef.current?.click(); |
| 742 | }; |
| 743 | |
| 744 | const handleShareXFileUpload = (event: React.ChangeEvent<HTMLInputElement>) => { |
| 745 | const file = event.target.files?.[0]; |
| 746 | if (!file) return; |
| 747 | |
| 748 | const reader = new FileReader(); |
| 749 | reader.onload = (e: ProgressEvent<FileReader>) => { |
| 750 | try { |
| 751 | const content = String(e.target?.result || ""); |
| 752 | const parsed = parseShareXConfig(content); |
| 753 | store.sharexConfig = JSON.stringify(parsed, null, 2); |
| 754 | update(); |
| 755 | showToast("Imported ShareX config", Toasts.Type.SUCCESS); |
| 756 | } catch (error) { |
| 757 | const message = error instanceof Error ? error.message : "Failed to import ShareX config"; |
| 758 | showToast(message, Toasts.Type.FAILURE); |
| 759 | } |
| 760 | }; |
| 761 | reader.readAsText(file); |
| 762 | event.target.value = ""; |
| 763 | }; |
| 764 | |
| 765 | return ( |
| 766 | <> |
| 767 | <SettingsSection id="upload-service" name="Upload Service" description="Choose where BigFileUpload sends new files."> |
| 768 | <ServicePicker |
| 769 | value={store.serviceType as ServiceType} |
| 770 | onChange={service => { |
nothing calls this directly
no outgoing calls
no test coverage detected