airdcpp-webui 2.12.1-beta.3 → 2.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/index.html +1 -1
  2. package/dist/js/{223.d8381390628f8a92159f.chunk.js → 223.92cf614c9d87cf67385e.chunk.js} +2 -2
  3. package/dist/js/223.92cf614c9d87cf67385e.chunk.js.gz +0 -0
  4. package/dist/js/{223.d8381390628f8a92159f.chunk.js.map → 223.92cf614c9d87cf67385e.chunk.js.map} +1 -1
  5. package/dist/js/{236.a5df8c51dbebe95cc268.chunk.js → 236.6b4fd58c10a23138b7d8.chunk.js} +2 -2
  6. package/dist/js/236.6b4fd58c10a23138b7d8.chunk.js.gz +0 -0
  7. package/dist/js/236.6b4fd58c10a23138b7d8.chunk.js.map +1 -0
  8. package/dist/js/{544.58de40c388788ce8d588.chunk.js → 544.826a806e4535f09cf100.chunk.js} +2 -2
  9. package/dist/js/{544.58de40c388788ce8d588.chunk.js.gz → 544.826a806e4535f09cf100.chunk.js.gz} +0 -0
  10. package/dist/js/{544.58de40c388788ce8d588.chunk.js.map → 544.826a806e4535f09cf100.chunk.js.map} +1 -1
  11. package/dist/js/{616.6af0b2487703c8da4b2c.chunk.js → 616.57a60c241582d79fa280.chunk.js} +2 -2
  12. package/dist/js/616.57a60c241582d79fa280.chunk.js.gz +0 -0
  13. package/dist/js/{616.6af0b2487703c8da4b2c.chunk.js.map → 616.57a60c241582d79fa280.chunk.js.map} +1 -1
  14. package/dist/js/{favorite-hubs.5d14015c002fab9d6e93.chunk.js → favorite-hubs.f1ced66aa7691eeee525.chunk.js} +2 -2
  15. package/dist/js/favorite-hubs.f1ced66aa7691eeee525.chunk.js.gz +0 -0
  16. package/dist/js/{favorite-hubs.5d14015c002fab9d6e93.chunk.js.map → favorite-hubs.f1ced66aa7691eeee525.chunk.js.map} +1 -1
  17. package/dist/js/{filelists.69f099cbc0bb5b67d1b8.chunk.js → filelists.852a6a879bab1f93854e.chunk.js} +2 -2
  18. package/dist/js/filelists.852a6a879bab1f93854e.chunk.js.gz +0 -0
  19. package/dist/js/{filelists.69f099cbc0bb5b67d1b8.chunk.js.map → filelists.852a6a879bab1f93854e.chunk.js.map} +1 -1
  20. package/dist/js/{home.ccd57551ac01ff4fc4ba.chunk.js → home.9a37f3a3c78cb9b3f45c.chunk.js} +3 -3
  21. package/dist/js/home.9a37f3a3c78cb9b3f45c.chunk.js.gz +0 -0
  22. package/dist/js/home.9a37f3a3c78cb9b3f45c.chunk.js.map +1 -0
  23. package/dist/js/{hubs.c2b8880d6d8ccfc9eb3a.chunk.js → hubs.c21b941c411425d4852f.chunk.js} +2 -2
  24. package/dist/js/hubs.c21b941c411425d4852f.chunk.js.gz +0 -0
  25. package/dist/js/hubs.c21b941c411425d4852f.chunk.js.map +1 -0
  26. package/dist/js/main.7a746a54efc4bf96cd20.entry.js +3 -0
  27. package/dist/js/{main.a7216efbb2c5cd34c7e5.entry.js.LICENSE.txt → main.7a746a54efc4bf96cd20.entry.js.LICENSE.txt} +3 -3
  28. package/dist/js/main.7a746a54efc4bf96cd20.entry.js.gz +0 -0
  29. package/dist/js/main.7a746a54efc4bf96cd20.entry.js.map +1 -0
  30. package/dist/js/{messages.980fd246050252a227cd.chunk.js → messages.6ed02d7d7ec7e06a93f2.chunk.js} +2 -2
  31. package/dist/js/messages.6ed02d7d7ec7e06a93f2.chunk.js.gz +0 -0
  32. package/dist/js/{messages.980fd246050252a227cd.chunk.js.map → messages.6ed02d7d7ec7e06a93f2.chunk.js.map} +1 -1
  33. package/dist/js/{queue.31409106566ce8e19fc3.chunk.js → queue.c73112a5c40baeee7c54.chunk.js} +2 -2
  34. package/dist/js/queue.c73112a5c40baeee7c54.chunk.js.gz +0 -0
  35. package/dist/js/{queue.31409106566ce8e19fc3.chunk.js.map → queue.c73112a5c40baeee7c54.chunk.js.map} +1 -1
  36. package/dist/js/{search.d724d4a3b2c8f3fe2768.chunk.js → search.66bbb5aead0f68100e76.chunk.js} +2 -2
  37. package/dist/js/search.66bbb5aead0f68100e76.chunk.js.gz +0 -0
  38. package/dist/js/{search.d724d4a3b2c8f3fe2768.chunk.js.map → search.66bbb5aead0f68100e76.chunk.js.map} +1 -1
  39. package/dist/js/settings.a509b3c48b03452b6783.chunk.js +2 -0
  40. package/dist/js/settings.a509b3c48b03452b6783.chunk.js.gz +0 -0
  41. package/dist/js/settings.a509b3c48b03452b6783.chunk.js.map +1 -0
  42. package/dist/js/{share.a35d32796acde4fc3d59.chunk.js → share.6efce937acbd036d089d.chunk.js} +2 -2
  43. package/dist/js/share.6efce937acbd036d089d.chunk.js.gz +0 -0
  44. package/dist/js/{share.a35d32796acde4fc3d59.chunk.js.map → share.6efce937acbd036d089d.chunk.js.map} +1 -1
  45. package/dist/js/{system-log.2d9af5f3372752909d83.chunk.js → system-log.3efd872fbf4a90cde8d5.chunk.js} +2 -2
  46. package/dist/js/system-log.3efd872fbf4a90cde8d5.chunk.js.gz +0 -0
  47. package/dist/js/{system-log.2d9af5f3372752909d83.chunk.js.map → system-log.3efd872fbf4a90cde8d5.chunk.js.map} +1 -1
  48. package/dist/js/{transfers.22bad3799f0455da946b.chunk.js → transfers.326119d8de6e6f8176b5.chunk.js} +2 -2
  49. package/dist/js/transfers.326119d8de6e6f8176b5.chunk.js.gz +0 -0
  50. package/dist/js/{transfers.22bad3799f0455da946b.chunk.js.map → transfers.326119d8de6e6f8176b5.chunk.js.map} +1 -1
  51. package/dist/sw.js +1 -1
  52. package/dist/sw.js.gz +0 -0
  53. package/jest.config.js +1 -1
  54. package/package.json +2 -2
  55. package/tsconfig.json +1 -1
  56. package/dist/js/223.d8381390628f8a92159f.chunk.js.gz +0 -0
  57. package/dist/js/236.a5df8c51dbebe95cc268.chunk.js.gz +0 -0
  58. package/dist/js/236.a5df8c51dbebe95cc268.chunk.js.map +0 -1
  59. package/dist/js/616.6af0b2487703c8da4b2c.chunk.js.gz +0 -0
  60. package/dist/js/favorite-hubs.5d14015c002fab9d6e93.chunk.js.gz +0 -0
  61. package/dist/js/filelists.69f099cbc0bb5b67d1b8.chunk.js.gz +0 -0
  62. package/dist/js/home.ccd57551ac01ff4fc4ba.chunk.js.gz +0 -0
  63. package/dist/js/home.ccd57551ac01ff4fc4ba.chunk.js.map +0 -1
  64. package/dist/js/hubs.c2b8880d6d8ccfc9eb3a.chunk.js.gz +0 -0
  65. package/dist/js/hubs.c2b8880d6d8ccfc9eb3a.chunk.js.map +0 -1
  66. package/dist/js/main.a7216efbb2c5cd34c7e5.entry.js +0 -3
  67. package/dist/js/main.a7216efbb2c5cd34c7e5.entry.js.gz +0 -0
  68. package/dist/js/main.a7216efbb2c5cd34c7e5.entry.js.map +0 -1
  69. package/dist/js/messages.980fd246050252a227cd.chunk.js.gz +0 -0
  70. package/dist/js/queue.31409106566ce8e19fc3.chunk.js.gz +0 -0
  71. package/dist/js/search.d724d4a3b2c8f3fe2768.chunk.js.gz +0 -0
  72. package/dist/js/settings.4087d834170e87ff1c53.chunk.js +0 -2
  73. package/dist/js/settings.4087d834170e87ff1c53.chunk.js.gz +0 -0
  74. package/dist/js/settings.4087d834170e87ff1c53.chunk.js.map +0 -1
  75. package/dist/js/share.a35d32796acde4fc3d59.chunk.js.gz +0 -0
  76. package/dist/js/system-log.2d9af5f3372752909d83.chunk.js.gz +0 -0
  77. package/dist/js/transfers.22bad3799f0455da946b.chunk.js.gz +0 -0
  78. /package/dist/js/{home.ccd57551ac01ff4fc4ba.chunk.js.LICENSE.txt → home.9a37f3a3c78cb9b3f45c.chunk.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"js/transfers.22bad3799f0455da946b.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Transfers/style.css","webpack://airdcpp-webui/./src/actions/ui/queue/QueueFileActions.ts","webpack://airdcpp-webui/./src/actions/ui/queue/QueueSourceActions.ts","webpack://airdcpp-webui/./src/components/EncryptionState.tsx","webpack://airdcpp-webui/./src/components/semantic/Progress.tsx","webpack://airdcpp-webui/./src/stores/TransferStore.js","webpack://airdcpp-webui/./src/routes/Transfers/components/NameCell.tsx","webpack://airdcpp-webui/./src/routes/Transfers/components/StatusCell.tsx","webpack://airdcpp-webui/./src/actions/ui/transfer/TransferActions.ts","webpack://airdcpp-webui/./src/routes/Transfers/components/UserCell.tsx","webpack://airdcpp-webui/./src/routes/Transfers/style.css?f802","webpack://airdcpp-webui/./src/routes/Transfers/components/Transfers.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.status .error {\n color: red;\n}\n\n.transfer.status .target {\n word-break: break-all;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Transfers/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,UAAU;AACZ;;AAEA;EACE,qBAAqB;AACvB\",\"sourcesContent\":[\".status .error {\\n color: red;\\n}\\n\\n.transfer.status .target {\\n word-break: break-all;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import QueueConstants from 'constants/QueueConstants';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport SearchActions from 'actions/reflux/SearchActions';\r\n\r\ntype Filter = UI.ActionFilter<API.QueueFile>;\r\nconst itemNotFinished: Filter = ({ itemData: file }) => file.time_finished === 0;\r\n\r\ntype Handler = UI.ActionHandler<API.QueueFile>;\r\nconst handleSearch: Handler = ({ itemData: file, location, navigate }) => {\r\n return SearchActions.search(file, location, navigate);\r\n};\r\n\r\nconst handleRemoveFile: Handler = ({ itemData: file }, removeFinished: boolean) => {\r\n return SocketService.post(`${QueueConstants.FILES_URL}/${file.id}/remove`, {\r\n remove_finished: removeFinished,\r\n });\r\n};\r\n\r\nconst handleSearchFileAlternates: Handler = ({ itemData: file }) => {\r\n return SocketService.post(`${QueueConstants.FILES_URL}/${file.id}/search`);\r\n};\r\n\r\nexport const QueueFileSearchAction = {\r\n id: 'search',\r\n displayName: 'Search (foreground)',\r\n access: API.AccessEnum.SEARCH,\r\n icon: IconConstants.SEARCH,\r\n handler: handleSearch,\r\n};\r\n\r\nexport const QueueFileSearchAlternatesAction = {\r\n id: 'searchAlternates',\r\n displayName: 'Search for alternates',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.SEARCH_ALTERNATES,\r\n filter: itemNotFinished,\r\n handler: handleSearchFileAlternates,\r\n};\r\n\r\nexport const QueueFileRemoveAction = {\r\n id: 'remove',\r\n displayName: 'Remove',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n confirmation: {\r\n content: 'Are you sure that you want to remove the file {{item.name}}?',\r\n approveCaption: 'Remove file',\r\n rejectCaption: `Don't remove`,\r\n checkboxCaption: 'Remove on disk',\r\n },\r\n handler: handleRemoveFile,\r\n notifications: {\r\n onSuccess: 'File {{item.name}} was removed from queue',\r\n },\r\n};\r\n\r\nconst QueueFileActions: UI.ActionListType<API.QueueFile> = {\r\n search: QueueFileSearchAction,\r\n searchFileAlternates: QueueFileSearchAlternatesAction,\r\n removeFile: QueueFileRemoveAction,\r\n};\r\n\r\nexport const QueueFileActionModule = {\r\n moduleId: UI.Modules.QUEUE,\r\n //subId: 'file',\r\n};\r\n\r\nexport const QueueFileActionMenu = {\r\n moduleData: QueueFileActionModule,\r\n actions: QueueFileActions,\r\n};\r\n","import QueueConstants from 'constants/QueueConstants';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nconst handleRemoveSource: UI.ActionHandler<API.User> = ({ itemData: user }) => {\r\n return SocketService.delete(`${QueueConstants.SOURCES_URL}/${user.cid}`);\r\n};\r\n\r\nexport const QueueSourceRemoveAction = {\r\n id: 'removeSource',\r\n displayName: 'Remove user from queue',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n handler: handleRemoveSource,\r\n notifications: {\r\n onSuccess: 'The user {{user.nicks}} was removed from {{result.count}} files',\r\n },\r\n};\r\n\r\nconst QueueSourceActions: UI.ActionListType<API.User> = {\r\n removeSource: QueueSourceRemoveAction,\r\n};\r\n\r\nexport const QueueSourceActionModule = {\r\n moduleId: UI.Modules.QUEUE,\r\n};\r\n\r\nexport const QueueSourceActionMenu = {\r\n moduleData: QueueSourceActionModule,\r\n actions: QueueSourceActions,\r\n};\r\n","import PropTypes from 'prop-types';\nimport * as React from 'react';\n\nimport Popup from 'components/semantic/Popup';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { Trans } from 'react-i18next';\nimport { toI18nKey } from 'utils/TranslationUtils';\nimport Icon from './semantic/Icon';\nimport IconConstants from 'constants/IconConstants';\n\ninterface Info {\n iconColor: string;\n messageColor: string;\n message: string;\n cornerIcon: string;\n translationKey: string;\n}\n\nconst encryptionToInfo = (encryption: API.EncryptionInfo): Info => {\n const tlsVersion = encryption.str.match(/TLSv([\\d.]+)/);\n if (tlsVersion && tlsVersion.length === 2 && parseFloat(tlsVersion[1]) < 1.2) {\n return {\n iconColor: 'orange',\n messageColor: 'red',\n message: 'Outdated cryptographic protocol with known security vulnerabilities',\n cornerIcon: 'orange warning',\n translationKey: 'tlsOutdatedWarning',\n };\n }\n\n if (!encryption.trusted) {\n return {\n iconColor: 'yellow',\n messageColor: 'orange',\n message: 'Authenticity of the certificate could not be validated',\n cornerIcon: 'blue help',\n translationKey: 'tlsAuthenticityWarning',\n };\n }\n\n return {\n iconColor: 'green',\n messageColor: 'green',\n message: 'Authenticity of the certificate is validated',\n cornerIcon: '',\n translationKey: 'tlsOk',\n };\n};\n\ninterface InfoMessageProps {\n info: Info;\n encryption: API.EncryptionInfo;\n}\n\nconst InfoMessage: React.FC<InfoMessageProps> = ({ info, encryption }) => (\n <div>\n <p>{encryption.str}</p>\n <p style={{ color: info.messageColor }}>\n <Trans i18nKey={toI18nKey(info.translationKey, UI.Modules.COMMON)}>\n {info.message}\n </Trans>\n </p>\n </div>\n);\n\ninterface EncryptionStateProps\n extends Partial<Pick<SemanticUI.PopupSettings, 'boundary'>> {\n encryption?: API.EncryptionInfo;\n alwaysVisible?: boolean;\n}\n\nclass EncryptionState extends React.PureComponent<EncryptionStateProps> {\n static propTypes = {\n encryption: PropTypes.object,\n boundary: PropTypes.string,\n\n // Show the lock icon even when there is no encryption\n alwaysVisible: PropTypes.bool,\n };\n\n getChildren = () => {\n const { encryption } = this.props;\n\n const info = encryptionToInfo(encryption!);\n return <InfoMessage info={info} encryption={encryption!} />;\n };\n\n render() {\n const { encryption, alwaysVisible, boundary } = this.props;\n if (!encryption) {\n return !!alwaysVisible && <Icon color=\"grey\" icon={IconConstants.LOCK} />;\n }\n\n const info = encryptionToInfo(encryption);\n return (\n <Popup\n triggerClassName=\"encryption\"\n className=\"basic encryption content\"\n trigger={\n <Icon\n color={info.iconColor}\n icon={IconConstants.LOCK}\n cornerIcon={info.cornerIcon}\n />\n }\n settings={\n {\n boundary,\n } as SemanticUI.PopupSettings\n }\n >\n {this.getChildren}\n </Popup>\n );\n }\n}\n\nexport default EncryptionState;\n","import PropTypes from 'prop-types';\nimport * as React from 'react';\nimport classNames from 'classnames';\n\nexport interface ProgressProps {\n caption?: React.ReactNode;\n className?: string | null;\n percent?: number;\n}\n\nconst Progress: React.FC<ProgressProps> = ({ className, percent, caption }) => (\n <div\n className={classNames('ui progress', className, {\n indeterminate: percent === undefined,\n })}\n data-percent={percent}\n >\n <div\n className=\"bar\"\n style={{\n transitionDuration: 300 + 'ms',\n width: percent === undefined ? undefined : percent + '%',\n minWidth: '0px',\n }}\n >\n <div className=\"progress\" />\n </div>\n {!!caption && <div className=\"label\">{caption}</div>}\n </div>\n);\n\nProgress.propTypes = {\n percent: PropTypes.number.isRequired,\n caption: PropTypes.node.isRequired,\n className: PropTypes.string,\n};\n\nexport default Progress;\n","import Reflux from 'reflux';\n\nimport TransferConstants from 'constants/TransferConstants';\nimport ViewStoreMixin from 'mixins/ViewStoreMixin';\n\nexport default Reflux.createStore({\n _viewName: 'transfer_view',\n _apiUrl: TransferConstants.MODULE_URL,\n mixins: [ViewStoreMixin('user')],\n});\n","import * as React from 'react';\n\nimport FormattedFile from 'components/format/FormattedFile';\nimport Popup from 'components/semantic/Popup';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\n\nconst NameCaption: React.FC<RowWrapperCellChildProps<string, API.Transfer>> = ({\n cellData,\n rowData,\n}) => (\n <Popup triggerClassName=\"name\" className=\"basic target\" trigger={cellData}>\n <div>{rowData!.target}</div>\n </Popup>\n);\n\ninterface NameCellProps extends RowWrapperCellChildProps<string, API.Transfer> {}\n\nclass NameCell extends React.Component<NameCellProps> {\n shouldComponentUpdate(nextProps: NameCellProps) {\n return nextProps.cellData !== this.props.cellData;\n }\n\n render() {\n const { cellData, rowDataGetter } = this.props;\n if (!cellData) {\n return null;\n }\n\n const rowData = rowDataGetter!();\n if (!rowData.type) {\n return null;\n }\n\n return (\n <FormattedFile\n typeInfo={rowData.type}\n caption={<NameCaption cellData={cellData} rowData={rowData} />}\n />\n );\n }\n}\n\nexport default NameCell;\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport Progress from 'components/semantic/Progress';\r\n\r\nimport EncryptionState from 'components/EncryptionState';\r\nimport Loader from 'components/semantic/Loader';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\n\r\nconst getStatusClass = (cellData: API.TransferStatus, rowData: API.Transfer) => {\r\n const statusId = cellData.id;\r\n return classNames(\r\n { grey: statusId === API.TransferStatusEnum.WAITING },\r\n { blue: statusId === API.TransferStatusEnum.RUNNING && rowData.download },\r\n { red: statusId === API.TransferStatusEnum.RUNNING && !rowData.download },\r\n { green: statusId === API.TransferStatusEnum.FINISHED && rowData.download },\r\n { brown: statusId === API.TransferStatusEnum.FINISHED && !rowData.download },\r\n { red: statusId === API.TransferStatusEnum.FAILED },\r\n );\r\n};\r\n\r\ninterface StatusCellProps\r\n extends RowWrapperCellChildProps<API.TransferStatus, API.Transfer> {}\r\n\r\nconst StatusCell: React.FC<StatusCellProps> = ({ cellData, rowDataGetter }) => {\r\n if (cellData!.id === API.TransferStatusEnum.WAITING) {\r\n return <Loader size=\"small\" inline={true} text={cellData!.str} />;\r\n }\r\n\r\n if (cellData!.id === API.TransferStatusEnum.FAILED) {\r\n return <span className=\"error\">{cellData!.str}</span>;\r\n }\r\n\r\n const rowData = rowDataGetter!();\r\n let caption: React.ReactNode = cellData!.str;\r\n if (rowData.encryption) {\r\n caption = (\r\n <span className=\"transfer status encryption\">\r\n <EncryptionState encryption={rowData.encryption} />\r\n {caption}\r\n </span>\r\n );\r\n }\r\n\r\n return (\r\n <Progress\r\n className={getStatusClass(cellData!, rowData)}\r\n caption={caption}\r\n percent={(rowData.bytes_transferred * 100) / rowData.size}\r\n />\r\n );\r\n};\r\n\r\nexport default StatusCell;\r\n","import SocketService from 'services/SocketService';\r\n\r\nimport { QueueSourceRemoveAction } from 'actions/ui/queue/QueueSourceActions';\r\n\r\nimport { QueueFileRemoveAction } from 'actions/ui/queue/QueueFileActions';\r\n\r\nimport { default as TransferConstants, StatusEnum } from 'constants/TransferConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport { MENU_DIVIDER } from 'constants/ActionConstants';\r\n\r\n// Filters\r\ntype Filter = UI.ActionFilter<API.Transfer>;\r\nconst isFilelist: Filter = ({ itemData: transfer }) =>\r\n !!transfer.type && (transfer.type as API.FileType).content_type === 'filelist';\r\nconst isDownload: Filter = ({ itemData: transfer }) => transfer.download;\r\nconst isFinished: Filter = ({ itemData: transfer }) =>\r\n transfer.status.id === StatusEnum.FINISHED;\r\nconst removeFile: Filter = (data) =>\r\n isDownload(data) && isFilelist(data) && !isFinished(data);\r\nconst removeSource: Filter = (data) => isDownload(data) && !isFinished(data);\r\n\r\n// Handlers\r\ntype Handler = UI.ActionHandler<API.Transfer>;\r\nconst handleForce: Handler = ({ itemData: transfer }) => {\r\n return SocketService.post(`${TransferConstants.TRANSFERS_URL}/${transfer.id}/force`);\r\n};\r\n\r\nconst handleDisconnect: Handler = ({ itemData: transfer }) => {\r\n return SocketService.post(\r\n `${TransferConstants.TRANSFERS_URL}/${transfer.id}/disconnect`,\r\n );\r\n};\r\n\r\nconst handleRemoveFile: Handler = ({ itemData: transfer, ...other }) => {\r\n return QueueFileRemoveAction.handler({\r\n itemData: {\r\n id: transfer.queue_file_id,\r\n target: transfer.target,\r\n name: transfer.name,\r\n } as API.QueueFile,\r\n ...other,\r\n });\r\n};\r\n\r\nconst handleRemoveSource: Handler = ({ itemData: transfer, ...other }) => {\r\n return QueueSourceRemoveAction.handler({\r\n itemData: {\r\n ...transfer.user,\r\n id: transfer.user.cid,\r\n hub_urls: [transfer.user.hub_url],\r\n flags: transfer.user.flags as API.UserFlag[],\r\n },\r\n ...other,\r\n });\r\n};\r\n\r\nexport const TransferForceAction = {\r\n id: 'force',\r\n displayName: 'Force connect',\r\n access: API.AccessEnum.TRANSFERS,\r\n icon: IconConstants.REFRESH_COLORED,\r\n filter: isDownload,\r\n handler: handleForce,\r\n};\r\n\r\nexport const TransferDisconnectAction = {\r\n id: 'disconnect',\r\n displayName: 'Disconnect',\r\n access: API.AccessEnum.TRANSFERS,\r\n icon: IconConstants.DISCONNECT,\r\n filter: isDownload,\r\n handler: handleDisconnect,\r\n};\r\n\r\nexport const TransferRemoveFileAction = {\r\n id: 'removeFile',\r\n displayName: 'Remove file from queue',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n filter: removeFile,\r\n handler: handleRemoveFile,\r\n notifications: {\r\n onSuccess: 'File {{item.name}} was removed from queue',\r\n },\r\n};\r\n\r\nexport const TransferRemoveSourceAction = {\r\n id: 'removeSource',\r\n displayName: 'Remove user from queue',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n filter: removeSource,\r\n handler: handleRemoveSource,\r\n notifications: {\r\n onSuccess: 'The user {{item.user.nicks}} was removed from {{result.count}} files',\r\n },\r\n};\r\n\r\nconst TransferActions: UI.ActionListType<API.Transfer> = {\r\n force: TransferForceAction,\r\n disconnect: TransferDisconnectAction,\r\n divider: MENU_DIVIDER,\r\n removeFile: TransferRemoveFileAction,\r\n removeSource: TransferRemoveSourceAction,\r\n};\r\n\r\nexport const TransferActionModule = {\r\n moduleId: UI.Modules.TRANSFERS,\r\n};\r\n\r\nexport const TransferActionMenu = {\r\n moduleData: TransferActionModule,\r\n actions: TransferActions,\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { UserFileActions } from 'actions/ui/user/UserActions';\r\n\r\nimport { TableActionMenu, TableUserMenu } from 'components/action-menu';\r\nimport IconConstants from 'constants/IconConstants';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\nimport MenuConstants from 'constants/MenuConstants';\r\nimport classNames from 'classnames';\r\nimport { TransferActionMenu } from 'actions/ui/transfer';\r\n\r\nconst UserCaption: React.FC<RowWrapperCellChildProps<API.HintedUser, API.Transfer>> = ({\r\n cellData,\r\n rowData,\r\n}) => (\r\n <div className=\"transfer-user icon-caption\">\r\n <i\r\n className={classNames(\r\n rowData!.download ? IconConstants.DOWNLOAD : IconConstants.UPLOAD,\r\n 'large icon',\r\n )}\r\n />\r\n {cellData!.nicks}\r\n </div>\r\n);\r\n\r\ninterface UserCellProps extends RowWrapperCellChildProps<API.HintedUser, API.Transfer> {}\r\n\r\nclass UserCell extends React.Component<UserCellProps> {\r\n shouldComponentUpdate(nextProps: UserCellProps) {\r\n return nextProps.cellData !== this.props.cellData;\r\n }\r\n\r\n render() {\r\n const { cellData, rowDataGetter } = this.props;\r\n return (\r\n <TableUserMenu\r\n user={cellData!}\r\n userIcon={null}\r\n ids={UserFileActions}\r\n text={<UserCaption rowData={rowDataGetter!()} cellData={cellData} />}\r\n remoteMenuId={MenuConstants.HINTED_USER}\r\n >\r\n <TableActionMenu\r\n itemData={rowDataGetter}\r\n actions={TransferActionMenu}\r\n remoteMenuId={MenuConstants.TRANSFER}\r\n />\r\n </TableUserMenu>\r\n );\r\n }\r\n}\r\n\r\nexport default UserCell;\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n export default content && content.locals ? content.locals : undefined;\n","import * as React from 'react';\n\nimport TransferStore from 'stores/TransferStore';\n\nimport Message from 'components/semantic/Message';\n\nimport NameCell from 'routes/Transfers/components/NameCell';\nimport StatusCell from 'routes/Transfers/components/StatusCell';\nimport UserCell from 'routes/Transfers/components/UserCell';\n\nimport { Column } from 'fixed-data-table-2';\nimport VirtualTable from 'components/table/VirtualTable';\nimport {\n SizeCell,\n SpeedCell,\n AbbreviatedDurationCell,\n IpCell,\n} from 'components/table/Cell';\n\nimport '../style.css';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { translate } from 'utils/TranslationUtils';\nimport IconConstants from 'constants/IconConstants';\n\nconst FlagsCell: React.FC<RowWrapperCellChildProps<string[], API.Transfer>> = ({\n cellData,\n}) => <span className=\"plain flags cell\">{cellData!.join('')}</span>;\n\ninterface TransfersProps extends WithTranslation {}\n\nclass Transfers extends React.Component<TransfersProps> {\n static displayName = 'Transfers';\n\n isPositive = (cellData: number) => {\n return cellData > 0;\n };\n\n isRunning = (cellData: any, rowData: API.Transfer) => {\n return rowData.speed > 0;\n };\n\n emptyRowsNodeGetter = () => {\n const { t } = this.props;\n return (\n <Message\n title={translate('No active transfers', t, UI.Modules.TRANSFERS)}\n icon={IconConstants.TRANSFERS_PLAIN}\n />\n );\n };\n\n render() {\n return (\n <VirtualTable\n emptyRowsNodeGetter={this.emptyRowsNodeGetter}\n store={TransferStore}\n moduleId={UI.Modules.TRANSFERS}\n >\n <Column\n name=\"User\"\n width={150}\n flexGrow={4}\n columnKey=\"user\"\n cell={<UserCell />}\n />\n <Column\n name=\"Name\"\n width={150}\n flexGrow={4}\n columnKey=\"name\"\n cell={<NameCell />}\n />\n <Column\n name=\"Segment\"\n width={65}\n columnKey=\"size\"\n cell={<SizeCell />}\n renderCondition={this.isPositive}\n flexGrow={1}\n />\n <Column\n name=\"Status\"\n width={140}\n flexGrow={4}\n columnKey=\"status\"\n cell={<StatusCell />}\n />\n <Column\n name=\"Time left\"\n width={50}\n columnKey=\"seconds_left\"\n renderCondition={this.isRunning}\n cell={<AbbreviatedDurationCell />}\n />\n <Column\n name=\"Speed\"\n width={50}\n columnKey=\"speed\"\n cell={<SpeedCell />}\n renderCondition={this.isRunning}\n flexGrow={1}\n />\n <Column\n name=\"Flags\"\n width={50}\n columnKey=\"flags\"\n cell={<FlagsCell />}\n renderCondition={this.isRunning}\n flexGrow={1}\n hideWidth={800}\n />\n <Column\n name=\"IP\"\n width={120}\n columnKey=\"ip\"\n flexGrow={1}\n cell={<IpCell />}\n hideWidth={1000}\n />\n </VirtualTable>\n );\n }\n}\n\nexport default withTranslation()(Transfers);\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","QueueFileSearchAction","displayName","access","SEARCH","icon","handler","itemData","file","location","navigate","search","QueueFileSearchAlternatesAction","QUEUE_EDIT","SEARCH_ALTERNATES","filter","time_finished","post","FILES_URL","QueueFileRemoveAction","REMOVE","confirmation","content","approveCaption","rejectCaption","checkboxCaption","removeFinished","remove_finished","notifications","onSuccess","QueueFileActions","searchFileAlternates","removeFile","QueueFileActionMenu","moduleData","moduleId","QUEUE","actions","QueueSourceRemoveAction","user","delete","SOURCES_URL","cid","encryptionToInfo","encryption","tlsVersion","str","match","length","parseFloat","iconColor","messageColor","message","cornerIcon","translationKey","trusted","InfoMessage","info","style","color","i18nKey","COMMON","EncryptionState","getChildren","this","props","render","alwaysVisible","boundary","LOCK","triggerClassName","className","trigger","settings","propTypes","Progress","percent","caption","indeterminate","undefined","transitionDuration","width","minWidth","isRequired","_viewName","_apiUrl","TransferConstants","MODULE_URL","mixins","ViewStoreMixin","NameCaption","cellData","rowData","Popup","target","NameCell","shouldComponentUpdate","nextProps","rowDataGetter","type","FormattedFile","typeInfo","getStatusClass","statusId","grey","WAITING","blue","RUNNING","download","red","green","FINISHED","brown","FAILED","Loader","size","inline","text","bytes_transferred","isDownload","transfer","isFinished","status","S","TransferForceAction","TRANSFERS","IconConstants","REFRESH_COLORED","SocketService","TRANSFERS_URL","TransferDisconnectAction","DISCONNECT","TransferRemoveFileAction","data","content_type","isFilelist","other","queue_file_id","name","TransferRemoveSourceAction","hub_urls","hub_url","flags","TransferActions","force","disconnect","divider","removeSource","TransferActionMenu","UserCaption","DOWNLOAD","UPLOAD","nicks","UserCell","userIcon","ids","remoteMenuId","MenuConstants","HINTED_USER","TRANSFER","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","FlagsCell","join","Transfers","isPositive","isRunning","speed","emptyRowsNodeGetter","t","Message","title","TRANSFERS_PLAIN","VirtualTable","store","TransferStore","flexGrow","columnKey","cell","renderCondition","hideWidth"],"sourceRoot":""}
1
+ {"version":3,"file":"js/transfers.326119d8de6e6f8176b5.chunk.js","mappings":"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","sources":["webpack://airdcpp-webui/./src/routes/Transfers/style.css","webpack://airdcpp-webui/./src/actions/ui/queue/QueueFileActions.ts","webpack://airdcpp-webui/./src/actions/ui/queue/QueueSourceActions.ts","webpack://airdcpp-webui/./src/components/EncryptionState.tsx","webpack://airdcpp-webui/./src/components/semantic/Progress.tsx","webpack://airdcpp-webui/./src/stores/TransferStore.js","webpack://airdcpp-webui/./src/routes/Transfers/components/NameCell.tsx","webpack://airdcpp-webui/./src/routes/Transfers/components/StatusCell.tsx","webpack://airdcpp-webui/./src/actions/ui/transfer/TransferActions.ts","webpack://airdcpp-webui/./src/routes/Transfers/components/UserCell.tsx","webpack://airdcpp-webui/./src/routes/Transfers/style.css?f802","webpack://airdcpp-webui/./src/routes/Transfers/components/Transfers.tsx"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.status .error {\n color: red;\n}\n\n.transfer.status .target {\n word-break: break-all;\n}\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/routes/Transfers/style.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,UAAU;AACZ;;AAEA;EACE,qBAAqB;AACvB\",\"sourcesContent\":[\".status .error {\\n color: red;\\n}\\n\\n.transfer.status .target {\\n word-break: break-all;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","import QueueConstants from 'constants/QueueConstants';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport SearchActions from 'actions/reflux/SearchActions';\r\n\r\ntype Filter = UI.ActionFilter<API.QueueFile>;\r\nconst itemNotFinished: Filter = ({ itemData: file }) => file.time_finished === 0;\r\n\r\ntype Handler = UI.ActionHandler<API.QueueFile>;\r\nconst handleSearch: Handler = ({ itemData: file, location, navigate }) => {\r\n return SearchActions.search(file, location, navigate);\r\n};\r\n\r\nconst handleRemoveFile: Handler = ({ itemData: file }, removeFinished: boolean) => {\r\n return SocketService.post(`${QueueConstants.FILES_URL}/${file.id}/remove`, {\r\n remove_finished: removeFinished,\r\n });\r\n};\r\n\r\nconst handleSearchFileAlternates: Handler = ({ itemData: file }) => {\r\n return SocketService.post(`${QueueConstants.FILES_URL}/${file.id}/search`);\r\n};\r\n\r\nexport const QueueFileSearchAction = {\r\n id: 'search',\r\n displayName: 'Search (foreground)',\r\n access: API.AccessEnum.SEARCH,\r\n icon: IconConstants.SEARCH,\r\n handler: handleSearch,\r\n};\r\n\r\nexport const QueueFileSearchAlternatesAction = {\r\n id: 'searchAlternates',\r\n displayName: 'Search for alternates',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.SEARCH_ALTERNATES,\r\n filter: itemNotFinished,\r\n handler: handleSearchFileAlternates,\r\n};\r\n\r\nexport const QueueFileRemoveAction = {\r\n id: 'remove',\r\n displayName: 'Remove',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n confirmation: {\r\n content: 'Are you sure that you want to remove the file {{item.name}}?',\r\n approveCaption: 'Remove file',\r\n rejectCaption: `Don't remove`,\r\n checkboxCaption: 'Remove on disk',\r\n },\r\n handler: handleRemoveFile,\r\n notifications: {\r\n onSuccess: 'File {{item.name}} was removed from queue',\r\n },\r\n};\r\n\r\nconst QueueFileActions: UI.ActionListType<API.QueueFile> = {\r\n search: QueueFileSearchAction,\r\n searchFileAlternates: QueueFileSearchAlternatesAction,\r\n removeFile: QueueFileRemoveAction,\r\n};\r\n\r\nexport const QueueFileActionModule = {\r\n moduleId: UI.Modules.QUEUE,\r\n //subId: 'file',\r\n};\r\n\r\nexport const QueueFileActionMenu = {\r\n moduleData: QueueFileActionModule,\r\n actions: QueueFileActions,\r\n};\r\n","import QueueConstants from 'constants/QueueConstants';\r\nimport SocketService from 'services/SocketService';\r\n\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\n\r\nconst handleRemoveSource: UI.ActionHandler<API.User> = ({ itemData: user }) => {\r\n return SocketService.delete(`${QueueConstants.SOURCES_URL}/${user.cid}`);\r\n};\r\n\r\nexport const QueueSourceRemoveAction = {\r\n id: 'removeSource',\r\n displayName: 'Remove user from queue',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n handler: handleRemoveSource,\r\n notifications: {\r\n onSuccess: 'The user {{user.nicks}} was removed from {{result.count}} files',\r\n },\r\n};\r\n\r\nconst QueueSourceActions: UI.ActionListType<API.User> = {\r\n removeSource: QueueSourceRemoveAction,\r\n};\r\n\r\nexport const QueueSourceActionModule = {\r\n moduleId: UI.Modules.QUEUE,\r\n};\r\n\r\nexport const QueueSourceActionMenu = {\r\n moduleData: QueueSourceActionModule,\r\n actions: QueueSourceActions,\r\n};\r\n","import PropTypes from 'prop-types';\nimport * as React from 'react';\n\nimport Popup from 'components/semantic/Popup';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\n\nimport { Trans } from 'react-i18next';\nimport { toI18nKey } from 'utils/TranslationUtils';\nimport Icon from './semantic/Icon';\nimport IconConstants from 'constants/IconConstants';\n\ninterface Info {\n iconColor: string;\n messageColor: string;\n message: string;\n cornerIcon: string;\n translationKey: string;\n}\n\nconst encryptionToInfo = (encryption: API.EncryptionInfo): Info => {\n const tlsVersion = encryption.str.match(/TLSv([\\d.]+)/);\n if (tlsVersion && tlsVersion.length === 2 && parseFloat(tlsVersion[1]) < 1.2) {\n return {\n iconColor: 'orange',\n messageColor: 'red',\n message: 'Outdated cryptographic protocol with known security vulnerabilities',\n cornerIcon: 'orange warning',\n translationKey: 'tlsOutdatedWarning',\n };\n }\n\n if (!encryption.trusted) {\n return {\n iconColor: 'yellow',\n messageColor: 'orange',\n message: 'Authenticity of the certificate could not be validated',\n cornerIcon: 'blue help',\n translationKey: 'tlsAuthenticityWarning',\n };\n }\n\n return {\n iconColor: 'green',\n messageColor: 'green',\n message: 'Authenticity of the certificate is validated',\n cornerIcon: '',\n translationKey: 'tlsOk',\n };\n};\n\ninterface InfoMessageProps {\n info: Info;\n encryption: API.EncryptionInfo;\n}\n\nconst InfoMessage: React.FC<InfoMessageProps> = ({ info, encryption }) => (\n <div>\n <p>{encryption.str}</p>\n <p style={{ color: info.messageColor }}>\n <Trans i18nKey={toI18nKey(info.translationKey, UI.Modules.COMMON)}>\n {info.message}\n </Trans>\n </p>\n </div>\n);\n\ninterface EncryptionStateProps\n extends Partial<Pick<SemanticUI.PopupSettings, 'boundary'>> {\n encryption?: API.EncryptionInfo;\n alwaysVisible?: boolean;\n}\n\nclass EncryptionState extends React.PureComponent<EncryptionStateProps> {\n static propTypes = {\n encryption: PropTypes.object,\n boundary: PropTypes.string,\n\n // Show the lock icon even when there is no encryption\n alwaysVisible: PropTypes.bool,\n };\n\n getChildren = () => {\n const { encryption } = this.props;\n\n const info = encryptionToInfo(encryption!);\n return <InfoMessage info={info} encryption={encryption!} />;\n };\n\n render() {\n const { encryption, alwaysVisible, boundary } = this.props;\n if (!encryption) {\n return !!alwaysVisible && <Icon color=\"grey\" icon={IconConstants.LOCK} />;\n }\n\n const info = encryptionToInfo(encryption);\n return (\n <Popup\n triggerClassName=\"encryption\"\n className=\"basic encryption content\"\n trigger={\n <Icon\n color={info.iconColor}\n icon={IconConstants.LOCK}\n cornerIcon={info.cornerIcon}\n />\n }\n settings={\n {\n boundary,\n } as SemanticUI.PopupSettings\n }\n >\n {this.getChildren}\n </Popup>\n );\n }\n}\n\nexport default EncryptionState;\n","import PropTypes from 'prop-types';\nimport * as React from 'react';\nimport classNames from 'classnames';\n\nexport interface ProgressProps {\n caption?: React.ReactNode;\n className?: string | null;\n percent?: number;\n}\n\nconst Progress: React.FC<ProgressProps> = ({ className, percent, caption }) => (\n <div\n className={classNames('ui progress', className, {\n indeterminate: percent === undefined,\n })}\n data-percent={percent}\n >\n <div\n className=\"bar\"\n style={{\n transitionDuration: 300 + 'ms',\n width: percent === undefined ? undefined : percent + '%',\n minWidth: '0px',\n }}\n >\n <div className=\"progress\" />\n </div>\n {!!caption && <div className=\"label\">{caption}</div>}\n </div>\n);\n\nProgress.propTypes = {\n percent: PropTypes.number.isRequired,\n caption: PropTypes.node.isRequired,\n className: PropTypes.string,\n};\n\nexport default Progress;\n","import Reflux from 'reflux';\n\nimport TransferConstants from 'constants/TransferConstants';\nimport ViewStoreMixin from 'mixins/ViewStoreMixin';\n\nexport default Reflux.createStore({\n _viewName: 'transfer_view',\n _apiUrl: TransferConstants.MODULE_URL,\n mixins: [ViewStoreMixin('user')],\n});\n","import * as React from 'react';\n\nimport FormattedFile from 'components/format/FormattedFile';\nimport Popup from 'components/semantic/Popup';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\n\nconst NameCaption: React.FC<RowWrapperCellChildProps<string, API.Transfer>> = ({\n cellData,\n rowData,\n}) => (\n <Popup triggerClassName=\"name\" className=\"basic target\" trigger={cellData}>\n <div>{rowData!.target}</div>\n </Popup>\n);\n\ninterface NameCellProps extends RowWrapperCellChildProps<string, API.Transfer> {}\n\nclass NameCell extends React.Component<NameCellProps> {\n shouldComponentUpdate(nextProps: NameCellProps) {\n return nextProps.cellData !== this.props.cellData;\n }\n\n render() {\n const { cellData, rowDataGetter } = this.props;\n if (!cellData) {\n return null;\n }\n\n const rowData = rowDataGetter!();\n if (!rowData.type) {\n return null;\n }\n\n return (\n <FormattedFile\n typeInfo={rowData.type}\n caption={<NameCaption cellData={cellData} rowData={rowData} />}\n />\n );\n }\n}\n\nexport default NameCell;\n","import * as React from 'react';\r\nimport classNames from 'classnames';\r\n\r\nimport Progress from 'components/semantic/Progress';\r\n\r\nimport EncryptionState from 'components/EncryptionState';\r\nimport Loader from 'components/semantic/Loader';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\n\r\nconst getStatusClass = (cellData: API.TransferStatus, rowData: API.Transfer) => {\r\n const statusId = cellData.id;\r\n return classNames(\r\n { grey: statusId === API.TransferStatusEnum.WAITING },\r\n { blue: statusId === API.TransferStatusEnum.RUNNING && rowData.download },\r\n { red: statusId === API.TransferStatusEnum.RUNNING && !rowData.download },\r\n { green: statusId === API.TransferStatusEnum.FINISHED && rowData.download },\r\n { brown: statusId === API.TransferStatusEnum.FINISHED && !rowData.download },\r\n { red: statusId === API.TransferStatusEnum.FAILED },\r\n );\r\n};\r\n\r\ninterface StatusCellProps\r\n extends RowWrapperCellChildProps<API.TransferStatus, API.Transfer> {}\r\n\r\nconst StatusCell: React.FC<StatusCellProps> = ({ cellData, rowDataGetter }) => {\r\n if (cellData!.id === API.TransferStatusEnum.WAITING) {\r\n return <Loader size=\"small\" inline={true} text={cellData!.str} />;\r\n }\r\n\r\n if (cellData!.id === API.TransferStatusEnum.FAILED) {\r\n return <span className=\"error\">{cellData!.str}</span>;\r\n }\r\n\r\n const rowData = rowDataGetter!();\r\n let caption: React.ReactNode = cellData!.str;\r\n if (rowData.encryption) {\r\n caption = (\r\n <span className=\"transfer status encryption\">\r\n <EncryptionState encryption={rowData.encryption} />\r\n {caption}\r\n </span>\r\n );\r\n }\r\n\r\n return (\r\n <Progress\r\n className={getStatusClass(cellData!, rowData)}\r\n caption={caption}\r\n percent={(rowData.bytes_transferred * 100) / rowData.size}\r\n />\r\n );\r\n};\r\n\r\nexport default StatusCell;\r\n","import SocketService from 'services/SocketService';\r\n\r\nimport { QueueSourceRemoveAction } from 'actions/ui/queue/QueueSourceActions';\r\n\r\nimport { QueueFileRemoveAction } from 'actions/ui/queue/QueueFileActions';\r\n\r\nimport { default as TransferConstants, StatusEnum } from 'constants/TransferConstants';\r\nimport IconConstants from 'constants/IconConstants';\r\n\r\nimport * as API from 'types/api';\r\nimport * as UI from 'types/ui';\r\nimport { MENU_DIVIDER } from 'constants/ActionConstants';\r\n\r\n// Filters\r\ntype Filter = UI.ActionFilter<API.Transfer>;\r\nconst isFilelist: Filter = ({ itemData: transfer }) =>\r\n !!transfer.type && (transfer.type as API.FileType).content_type === 'filelist';\r\nconst isDownload: Filter = ({ itemData: transfer }) => transfer.download;\r\nconst isFinished: Filter = ({ itemData: transfer }) =>\r\n transfer.status.id === StatusEnum.FINISHED;\r\nconst removeFile: Filter = (data) =>\r\n isDownload(data) && isFilelist(data) && !isFinished(data);\r\nconst removeSource: Filter = (data) => isDownload(data) && !isFinished(data);\r\n\r\n// Handlers\r\ntype Handler = UI.ActionHandler<API.Transfer>;\r\nconst handleForce: Handler = ({ itemData: transfer }) => {\r\n return SocketService.post(`${TransferConstants.TRANSFERS_URL}/${transfer.id}/force`);\r\n};\r\n\r\nconst handleDisconnect: Handler = ({ itemData: transfer }) => {\r\n return SocketService.post(\r\n `${TransferConstants.TRANSFERS_URL}/${transfer.id}/disconnect`,\r\n );\r\n};\r\n\r\nconst handleRemoveFile: Handler = ({ itemData: transfer, ...other }) => {\r\n return QueueFileRemoveAction.handler({\r\n itemData: {\r\n id: transfer.queue_file_id,\r\n target: transfer.target,\r\n name: transfer.name,\r\n } as API.QueueFile,\r\n ...other,\r\n });\r\n};\r\n\r\nconst handleRemoveSource: Handler = ({ itemData: transfer, ...other }) => {\r\n return QueueSourceRemoveAction.handler({\r\n itemData: {\r\n ...transfer.user,\r\n id: transfer.user.cid,\r\n hub_urls: [transfer.user.hub_url],\r\n flags: transfer.user.flags as API.UserFlag[],\r\n },\r\n ...other,\r\n });\r\n};\r\n\r\nexport const TransferForceAction = {\r\n id: 'force',\r\n displayName: 'Force connect',\r\n access: API.AccessEnum.TRANSFERS,\r\n icon: IconConstants.REFRESH_COLORED,\r\n filter: isDownload,\r\n handler: handleForce,\r\n};\r\n\r\nexport const TransferDisconnectAction = {\r\n id: 'disconnect',\r\n displayName: 'Disconnect',\r\n access: API.AccessEnum.TRANSFERS,\r\n icon: IconConstants.DISCONNECT,\r\n filter: isDownload,\r\n handler: handleDisconnect,\r\n};\r\n\r\nexport const TransferRemoveFileAction = {\r\n id: 'removeFile',\r\n displayName: 'Remove file from queue',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n filter: removeFile,\r\n handler: handleRemoveFile,\r\n notifications: {\r\n onSuccess: 'File {{item.name}} was removed from queue',\r\n },\r\n};\r\n\r\nexport const TransferRemoveSourceAction = {\r\n id: 'removeSource',\r\n displayName: 'Remove user from queue',\r\n access: API.AccessEnum.QUEUE_EDIT,\r\n icon: IconConstants.REMOVE,\r\n filter: removeSource,\r\n handler: handleRemoveSource,\r\n notifications: {\r\n onSuccess: 'The user {{item.user.nicks}} was removed from {{result.count}} files',\r\n },\r\n};\r\n\r\nconst TransferActions: UI.ActionListType<API.Transfer> = {\r\n force: TransferForceAction,\r\n disconnect: TransferDisconnectAction,\r\n divider: MENU_DIVIDER,\r\n removeFile: TransferRemoveFileAction,\r\n removeSource: TransferRemoveSourceAction,\r\n};\r\n\r\nexport const TransferActionModule = {\r\n moduleId: UI.Modules.TRANSFERS,\r\n};\r\n\r\nexport const TransferActionMenu = {\r\n moduleData: TransferActionModule,\r\n actions: TransferActions,\r\n};\r\n","import * as React from 'react';\r\n\r\nimport { UserFileActions } from 'actions/ui/user/UserActions';\r\n\r\nimport { TableActionMenu, TableUserMenu } from 'components/action-menu';\r\nimport IconConstants from 'constants/IconConstants';\r\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\r\n\r\nimport * as API from 'types/api';\r\nimport MenuConstants from 'constants/MenuConstants';\r\nimport classNames from 'classnames';\r\nimport { TransferActionMenu } from 'actions/ui/transfer';\r\n\r\nconst UserCaption: React.FC<RowWrapperCellChildProps<API.HintedUser, API.Transfer>> = ({\r\n cellData,\r\n rowData,\r\n}) => (\r\n <div className=\"transfer-user icon-caption\">\r\n <i\r\n className={classNames(\r\n rowData!.download ? IconConstants.DOWNLOAD : IconConstants.UPLOAD,\r\n 'large icon',\r\n )}\r\n />\r\n {cellData!.nicks}\r\n </div>\r\n);\r\n\r\ninterface UserCellProps extends RowWrapperCellChildProps<API.HintedUser, API.Transfer> {}\r\n\r\nclass UserCell extends React.Component<UserCellProps> {\r\n shouldComponentUpdate(nextProps: UserCellProps) {\r\n return nextProps.cellData !== this.props.cellData;\r\n }\r\n\r\n render() {\r\n const { cellData, rowDataGetter } = this.props;\r\n return (\r\n <TableUserMenu\r\n user={cellData!}\r\n userIcon={null}\r\n ids={UserFileActions}\r\n text={<UserCaption rowData={rowDataGetter!()} cellData={cellData} />}\r\n remoteMenuId={MenuConstants.HINTED_USER}\r\n >\r\n <TableActionMenu\r\n itemData={rowDataGetter}\r\n actions={TransferActionMenu}\r\n remoteMenuId={MenuConstants.TRANSFER}\r\n />\r\n </TableUserMenu>\r\n );\r\n }\r\n}\r\n\r\nexport default UserCell;\r\n","\n import API from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\noptions.insert = insertFn.bind(null, \"head\");\noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../node_modules/css-loader/dist/cjs.js!./style.css\";\n export default content && content.locals ? content.locals : undefined;\n","import * as React from 'react';\n\nimport TransferStore from 'stores/TransferStore';\n\nimport Message from 'components/semantic/Message';\n\nimport NameCell from 'routes/Transfers/components/NameCell';\nimport StatusCell from 'routes/Transfers/components/StatusCell';\nimport UserCell from 'routes/Transfers/components/UserCell';\n\nimport { Column } from 'fixed-data-table-2';\nimport VirtualTable from 'components/table/VirtualTable';\nimport {\n SizeCell,\n SpeedCell,\n AbbreviatedDurationCell,\n IpCell,\n} from 'components/table/Cell';\n\nimport '../style.css';\nimport { RowWrapperCellChildProps } from 'components/table/RowWrapperCell';\n\nimport * as API from 'types/api';\nimport * as UI from 'types/ui';\nimport { withTranslation, WithTranslation } from 'react-i18next';\nimport { translate } from 'utils/TranslationUtils';\nimport IconConstants from 'constants/IconConstants';\n\nconst FlagsCell: React.FC<RowWrapperCellChildProps<string[], API.Transfer>> = ({\n cellData,\n}) => <span className=\"plain flags cell\">{cellData!.join('')}</span>;\n\ninterface TransfersProps extends WithTranslation {}\n\nclass Transfers extends React.Component<TransfersProps> {\n static displayName = 'Transfers';\n\n isPositive = (cellData: number) => {\n return cellData > 0;\n };\n\n isRunning = (cellData: any, rowData: API.Transfer) => {\n return rowData.speed > 0;\n };\n\n emptyRowsNodeGetter = () => {\n const { t } = this.props;\n return (\n <Message\n title={translate('No active transfers', t, UI.Modules.TRANSFERS)}\n icon={IconConstants.TRANSFERS_PLAIN}\n />\n );\n };\n\n render() {\n return (\n <VirtualTable\n emptyRowsNodeGetter={this.emptyRowsNodeGetter}\n store={TransferStore}\n moduleId={UI.Modules.TRANSFERS}\n >\n <Column\n name=\"User\"\n width={150}\n flexGrow={4}\n columnKey=\"user\"\n cell={<UserCell />}\n />\n <Column\n name=\"Name\"\n width={150}\n flexGrow={4}\n columnKey=\"name\"\n cell={<NameCell />}\n />\n <Column\n name=\"Segment\"\n width={65}\n columnKey=\"size\"\n cell={<SizeCell />}\n renderCondition={this.isPositive}\n flexGrow={1}\n />\n <Column\n name=\"Status\"\n width={140}\n flexGrow={4}\n columnKey=\"status\"\n cell={<StatusCell />}\n />\n <Column\n name=\"Time left\"\n width={50}\n columnKey=\"seconds_left\"\n renderCondition={this.isRunning}\n cell={<AbbreviatedDurationCell />}\n />\n <Column\n name=\"Speed\"\n width={50}\n columnKey=\"speed\"\n cell={<SpeedCell />}\n renderCondition={this.isRunning}\n flexGrow={1}\n />\n <Column\n name=\"Flags\"\n width={50}\n columnKey=\"flags\"\n cell={<FlagsCell />}\n renderCondition={this.isRunning}\n flexGrow={1}\n hideWidth={800}\n />\n <Column\n name=\"IP\"\n width={120}\n columnKey=\"ip\"\n flexGrow={1}\n cell={<IpCell />}\n hideWidth={1000}\n />\n </VirtualTable>\n );\n }\n}\n\nexport default withTranslation()(Transfers);\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","QueueFileSearchAction","displayName","access","SEARCH","icon","handler","itemData","file","location","navigate","search","QueueFileSearchAlternatesAction","QUEUE_EDIT","SEARCH_ALTERNATES","filter","time_finished","post","FILES_URL","QueueFileRemoveAction","REMOVE","confirmation","content","approveCaption","rejectCaption","checkboxCaption","removeFinished","remove_finished","notifications","onSuccess","QueueFileActions","searchFileAlternates","removeFile","QueueFileActionMenu","moduleData","moduleId","QUEUE","actions","QueueSourceRemoveAction","user","delete","SOURCES_URL","cid","encryptionToInfo","encryption","tlsVersion","str","match","length","parseFloat","iconColor","messageColor","message","cornerIcon","translationKey","trusted","InfoMessage","info","style","color","i18nKey","COMMON","EncryptionState","getChildren","this","props","render","alwaysVisible","boundary","LOCK","triggerClassName","className","trigger","settings","propTypes","Progress","percent","caption","indeterminate","undefined","transitionDuration","width","minWidth","isRequired","_viewName","_apiUrl","TransferConstants","MODULE_URL","mixins","ViewStoreMixin","NameCaption","cellData","rowData","Popup","target","NameCell","shouldComponentUpdate","nextProps","rowDataGetter","type","FormattedFile","typeInfo","getStatusClass","statusId","grey","WAITING","blue","RUNNING","download","red","green","FINISHED","brown","FAILED","Loader","size","inline","text","bytes_transferred","isDownload","transfer","isFinished","status","S","TransferForceAction","TRANSFERS","IconConstants","REFRESH_COLORED","SocketService","TRANSFERS_URL","TransferDisconnectAction","DISCONNECT","TransferRemoveFileAction","data","content_type","isFilelist","other","queue_file_id","name","TransferRemoveSourceAction","hub_urls","hub_url","flags","TransferActions","force","disconnect","divider","removeSource","TransferActionMenu","UserCaption","DOWNLOAD","UPLOAD","nicks","UserCell","userIcon","ids","remoteMenuId","MenuConstants","HINTED_USER","TRANSFER","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","locals","FlagsCell","join","Transfers","isPositive","isRunning","speed","emptyRowsNodeGetter","t","Message","title","TRANSFERS_PLAIN","VirtualTable","store","TransferStore","flexGrow","columnKey","cell","renderCondition","hideWidth"],"sourceRoot":""}
package/dist/sw.js CHANGED
@@ -1,2 +1,2 @@
1
- (()=>{const e=self.location.origin+self.location.pathname.replace("sw.js",""),t=[{'revision':'3d97a0e13495c178196d0a2734953475','url':'index.html'},{'revision':null,'url':'js//locales/ca-webui-main-json.93114e928fe913b87bee.chunk.js'},{'revision':null,'url':'js//locales/da-webui-main-json.c133aa89d0447930e871.chunk.js'},{'revision':null,'url':'js//locales/de-webui-main-json.345f9893da5e9d362f27.chunk.js'},{'revision':null,'url':'js//locales/el-webui-main-json.9771ec1a8c87a5cdafe9.chunk.js'},{'revision':null,'url':'js//locales/en-webui-main-json.a3075734b64a212e0825.chunk.js'},{'revision':null,'url':'js//locales/en-webui-main-missing-json.c939b5b8ff92a6e5cec7.chunk.js'},{'revision':null,'url':'js//locales/es-webui-main-json.045d3353e69efb507a72.chunk.js'},{'revision':null,'url':'js//locales/eu-webui-main-json.4eff9aa5114977e8cb12.chunk.js'},{'revision':null,'url':'js//locales/fi-webui-main-json.bb2b3c6abcb96378ac0c.chunk.js'},{'revision':null,'url':'js//locales/fr-webui-main-json.1ed774f1e83d5d8c3e83.chunk.js'},{'revision':null,'url':'js//locales/hu-webui-main-json.8b2292fb64ba3cba180e.chunk.js'},{'revision':null,'url':'js//locales/it-webui-main-json.6a38fc56b7be3596aefa.chunk.js'},{'revision':null,'url':'js//locales/nl-webui-main-json.66d9d9a41f4fd07af979.chunk.js'},{'revision':null,'url':'js//locales/no-webui-main-json.0c4a4a03f87f5fd4fcf5.chunk.js'},{'revision':null,'url':'js//locales/pl-webui-main-json.1feea9e79ce00d533c15.chunk.js'},{'revision':null,'url':'js//locales/pt-br-webui-main-json.a28070862badfc5a6124.chunk.js'},{'revision':null,'url':'js//locales/pt-webui-main-json.16de7dffc806fc4eea61.chunk.js'},{'revision':null,'url':'js//locales/ro-webui-main-json.0ccb260d86648558e4be.chunk.js'},{'revision':null,'url':'js//locales/ru-webui-main-json.36a9f71bba17442844cb.chunk.js'},{'revision':null,'url':'js//locales/sv-webui-main-json.7655dd903d630d63189e.chunk.js'},{'revision':null,'url':'js//locales/tr-webui-main-json.9a2878ce70ed3d2d94d7.chunk.js'},{'revision':null,'url':'js//locales/uk_UA-webui-main-json.ae78f36b592d2a829a0f.chunk.js'},{'revision':null,'url':'js//locales/zh_CN-webui-main-json.5eb766802b95efcec030.chunk.js'},{'revision':null,'url':'js/120.a8f5f8541616fc354ae4.chunk.js'},{'revision':null,'url':'js/223.d8381390628f8a92159f.chunk.js'},{'revision':null,'url':'js/236.a5df8c51dbebe95cc268.chunk.js'},{'revision':null,'url':'js/270.409227c51875f5678581.chunk.js'},{'revision':null,'url':'js/544.58de40c388788ce8d588.chunk.js'},{'revision':null,'url':'js/616.6af0b2487703c8da4b2c.chunk.js'},{'revision':null,'url':'js/807.1854c3d61ed7bde5faaa.chunk.js'},{'revision':null,'url':'js/favorite-hubs.5d14015c002fab9d6e93.chunk.js'},{'revision':null,'url':'js/filelists.69f099cbc0bb5b67d1b8.chunk.js'},{'revision':null,'url':'js/files.0fe6240bcce0f32720d6.chunk.js'},{'revision':null,'url':'js/home.ccd57551ac01ff4fc4ba.chunk.js'},{'revision':null,'url':'js/hubs.c2b8880d6d8ccfc9eb3a.chunk.js'},{'revision':null,'url':'js/main.a7216efbb2c5cd34c7e5.entry.js'},{'revision':null,'url':'js/messages.980fd246050252a227cd.chunk.js'},{'revision':null,'url':'js/queue.31409106566ce8e19fc3.chunk.js'},{'revision':null,'url':'js/search.d724d4a3b2c8f3fe2768.chunk.js'},{'revision':null,'url':'js/settings.4087d834170e87ff1c53.chunk.js'},{'revision':null,'url':'js/share.a35d32796acde4fc3d59.chunk.js'},{'revision':null,'url':'js/system-log.2d9af5f3372752909d83.chunk.js'},{'revision':null,'url':'js/transfers.22bad3799f0455da946b.chunk.js'}].map((function(t){return e+t.url})),n="resource-store";function l(e,t){return caches.match(new URL(t)).then((function(t){return t?(console.log("[SW] Return cached",e.request.url),t):(console.log("[SW] Fetch",e.request.url),fetch(e.request))}))}self.addEventListener("install",(e=>{console.log("[SW] Worker installed"),e.waitUntil(caches.open(n).then((e=>e.addAll([...t]))).then((()=>{console.log("[SW] Assets: ",t)})).catch((e=>{throw console.error(e),e})))})),self.addEventListener("activate",(e=>{console.log("[SW] Activate event"),e.waitUntil(caches.keys().then((e=>Promise.all(e.map((e=>caches.open(e).then((e=>(e=>e.keys().then((n=>Promise.all(n.map((n=>t.includes(n.url)?(console.log(`[SW] Cached asset ${n.url} still exists, skip delete`),null):e.delete(n).then((e=>{console.log(`[SW] Cached asset ${n.url} deleted`,e)}))))))))(e)))))))))})),self.addEventListener("fetch",(t=>{if("GET"===t.request.method){if("navigate"===t.request.mode||t.request.url.startsWith(e)&&-1===t.request.url.indexOf(".",e.length)&&!t.request.url.replace(e,"").match(/^(view)\//)){console.log("[SW] Navigate action, fetch index",t.request.url);const s=e+"index.html";return t.respondWith(new Promise((e=>{fetch(s).then((l=>{caches.open(n).then((n=>{n.put(new Request(s),l.clone()).then((()=>{console.log("[SW] Index file cached",t.request.url),e(l)}))}))})).catch((n=>{console.log("[SW] Navigate action, failed to fetch index",t.request.url,n),e(l(t,s))}))})))}return t.respondWith(l(t,t.request.url))}}))})();
1
+ (()=>{const e=self.location.origin+self.location.pathname.replace("sw.js",""),t=[{'revision':'1af95468cc6a1258af376e7462b5cc21','url':'index.html'},{'revision':null,'url':'js//locales/ca-webui-main-json.93114e928fe913b87bee.chunk.js'},{'revision':null,'url':'js//locales/da-webui-main-json.c133aa89d0447930e871.chunk.js'},{'revision':null,'url':'js//locales/de-webui-main-json.345f9893da5e9d362f27.chunk.js'},{'revision':null,'url':'js//locales/el-webui-main-json.9771ec1a8c87a5cdafe9.chunk.js'},{'revision':null,'url':'js//locales/en-webui-main-json.a3075734b64a212e0825.chunk.js'},{'revision':null,'url':'js//locales/en-webui-main-missing-json.c939b5b8ff92a6e5cec7.chunk.js'},{'revision':null,'url':'js//locales/es-webui-main-json.045d3353e69efb507a72.chunk.js'},{'revision':null,'url':'js//locales/eu-webui-main-json.4eff9aa5114977e8cb12.chunk.js'},{'revision':null,'url':'js//locales/fi-webui-main-json.bb2b3c6abcb96378ac0c.chunk.js'},{'revision':null,'url':'js//locales/fr-webui-main-json.1ed774f1e83d5d8c3e83.chunk.js'},{'revision':null,'url':'js//locales/hu-webui-main-json.8b2292fb64ba3cba180e.chunk.js'},{'revision':null,'url':'js//locales/it-webui-main-json.6a38fc56b7be3596aefa.chunk.js'},{'revision':null,'url':'js//locales/nl-webui-main-json.66d9d9a41f4fd07af979.chunk.js'},{'revision':null,'url':'js//locales/no-webui-main-json.0c4a4a03f87f5fd4fcf5.chunk.js'},{'revision':null,'url':'js//locales/pl-webui-main-json.1feea9e79ce00d533c15.chunk.js'},{'revision':null,'url':'js//locales/pt-br-webui-main-json.a28070862badfc5a6124.chunk.js'},{'revision':null,'url':'js//locales/pt-webui-main-json.16de7dffc806fc4eea61.chunk.js'},{'revision':null,'url':'js//locales/ro-webui-main-json.0ccb260d86648558e4be.chunk.js'},{'revision':null,'url':'js//locales/ru-webui-main-json.36a9f71bba17442844cb.chunk.js'},{'revision':null,'url':'js//locales/sv-webui-main-json.7655dd903d630d63189e.chunk.js'},{'revision':null,'url':'js//locales/tr-webui-main-json.9a2878ce70ed3d2d94d7.chunk.js'},{'revision':null,'url':'js//locales/uk_UA-webui-main-json.ae78f36b592d2a829a0f.chunk.js'},{'revision':null,'url':'js//locales/zh_CN-webui-main-json.5eb766802b95efcec030.chunk.js'},{'revision':null,'url':'js/120.a8f5f8541616fc354ae4.chunk.js'},{'revision':null,'url':'js/223.92cf614c9d87cf67385e.chunk.js'},{'revision':null,'url':'js/236.6b4fd58c10a23138b7d8.chunk.js'},{'revision':null,'url':'js/270.409227c51875f5678581.chunk.js'},{'revision':null,'url':'js/544.826a806e4535f09cf100.chunk.js'},{'revision':null,'url':'js/616.57a60c241582d79fa280.chunk.js'},{'revision':null,'url':'js/807.1854c3d61ed7bde5faaa.chunk.js'},{'revision':null,'url':'js/favorite-hubs.f1ced66aa7691eeee525.chunk.js'},{'revision':null,'url':'js/filelists.852a6a879bab1f93854e.chunk.js'},{'revision':null,'url':'js/files.0fe6240bcce0f32720d6.chunk.js'},{'revision':null,'url':'js/home.9a37f3a3c78cb9b3f45c.chunk.js'},{'revision':null,'url':'js/hubs.c21b941c411425d4852f.chunk.js'},{'revision':null,'url':'js/main.7a746a54efc4bf96cd20.entry.js'},{'revision':null,'url':'js/messages.6ed02d7d7ec7e06a93f2.chunk.js'},{'revision':null,'url':'js/queue.c73112a5c40baeee7c54.chunk.js'},{'revision':null,'url':'js/search.66bbb5aead0f68100e76.chunk.js'},{'revision':null,'url':'js/settings.a509b3c48b03452b6783.chunk.js'},{'revision':null,'url':'js/share.6efce937acbd036d089d.chunk.js'},{'revision':null,'url':'js/system-log.3efd872fbf4a90cde8d5.chunk.js'},{'revision':null,'url':'js/transfers.326119d8de6e6f8176b5.chunk.js'}].map((function(t){return e+t.url})),n="resource-store";function l(e,t){return caches.match(new URL(t)).then((function(t){return t?(console.log("[SW] Return cached",e.request.url),t):(console.log("[SW] Fetch",e.request.url),fetch(e.request))}))}self.addEventListener("install",(e=>{console.log("[SW] Worker installed"),e.waitUntil(caches.open(n).then((e=>e.addAll([...t]))).then((()=>{console.log("[SW] Assets: ",t)})).catch((e=>{throw console.error(e),e})))})),self.addEventListener("activate",(e=>{console.log("[SW] Activate event"),e.waitUntil(caches.keys().then((e=>Promise.all(e.map((e=>caches.open(e).then((e=>(e=>e.keys().then((n=>Promise.all(n.map((n=>t.includes(n.url)?(console.log(`[SW] Cached asset ${n.url} still exists, skip delete`),null):e.delete(n).then((e=>{console.log(`[SW] Cached asset ${n.url} deleted`,e)}))))))))(e)))))))))})),self.addEventListener("fetch",(t=>{if("GET"===t.request.method){if("navigate"===t.request.mode||t.request.url.startsWith(e)&&-1===t.request.url.indexOf(".",e.length)&&!t.request.url.replace(e,"").match(/^(view)\//)){console.log("[SW] Navigate action, fetch index",t.request.url);const s=e+"index.html";return t.respondWith(new Promise((e=>{fetch(s).then((l=>{caches.open(n).then((n=>{n.put(new Request(s),l.clone()).then((()=>{console.log("[SW] Index file cached",t.request.url),e(l)}))}))})).catch((n=>{console.log("[SW] Navigate action, failed to fetch index",t.request.url,n),e(l(t,s))}))})))}return t.respondWith(l(t,t.request.url))}}))})();
2
2
  //# sourceMappingURL=sw.js.map
package/dist/sw.js.gz CHANGED
Binary file
package/jest.config.js CHANGED
@@ -14,5 +14,5 @@ module.exports = {
14
14
  setupFiles: ['./jest/setup.js'],
15
15
  cacheDirectory: './jest/cache/',
16
16
  testEnvironment: 'jsdom',
17
- transformIgnorePatterns: ['node_modules/(?!escape-string-regexp).+\\.(js|jsx)$'],
17
+ transformIgnorePatterns: ['node_modules/(?!(escape-string-regexp|airdcpp-apisocket))$'],
18
18
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "airdcpp-webui",
3
- "version": "2.12.1-beta.3",
3
+ "version": "2.12.1",
4
4
  "description": "AirDC++ Web UI",
5
5
  "license": "MIT",
6
6
  "authors": [
@@ -66,7 +66,7 @@
66
66
  "@types/webpack": "^5.28.0",
67
67
  "@typescript-eslint/eslint-plugin": "^7.0.1",
68
68
  "@typescript-eslint/parser": "^7.0.1",
69
- "airdcpp-apisocket": "^2.4.4",
69
+ "airdcpp-apisocket": "^3.0.0-beta",
70
70
  "babel-jest": "^29.2.2",
71
71
  "babel-loader": "^9.0.1",
72
72
  "babel-plugin-module-resolver": "^5.0.0",
package/tsconfig.json CHANGED
@@ -7,7 +7,7 @@
7
7
  "sourceMap": true,
8
8
  "allowJs": true,
9
9
  "jsx": "react-jsx",
10
- "moduleResolution": "node",
10
+ "moduleResolution": "bundler",
11
11
  "rootDir": "src",
12
12
  "forceConsistentCasingInFileNames": true,
13
13
  "noImplicitReturns": true,