diff --git a/dist/bundle.js b/dist/bundle.js index 37d2875..008f299 100644 --- a/dist/bundle.js +++ b/dist/bundle.js @@ -1076,19 +1076,34 @@ return /******/ (function(modules) { // webpackBootstrap /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); +/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ +/******/ // create a fake namespace object +/******/ // mode & 1: value is a module id, require it +/******/ // mode & 2: merge all properties of value into the ns +/******/ // mode & 4: return value when already ns object +/******/ // mode & 8|1: behave like require +/******/ __webpack_require__.t = function(value, mode) { +/******/ if(mode & 1) value = __webpack_require__(value); +/******/ if(mode & 8) return value; +/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; +/******/ var ns = Object.create(null); +/******/ __webpack_require__.r(ns); +/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); +/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); +/******/ return ns; +/******/ }; +/******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? @@ -1119,8 +1134,8 @@ return /******/ (function(modules) { // webpackBootstrap Object.defineProperty(exports, "__esModule", { value: true }); -exports.selectBlocks = exports.selectDraftTransactionError = exports.selectDraftTransactionAddress = exports.selectDraftTransactionAmount = exports.selectDraftTransaction = exports.selectGettingNewAddress = exports.selectReceiveAddress = exports.selectIsSendingSupport = exports.selectIsFetchingTransactions = exports.selectHasTransactions = exports.selectRecentTransactions = exports.selectTransactionItems = exports.selectTransactionsById = exports.selectBalance = exports.makeSelectBlockDate = exports.selectSearchBarFocused = exports.selectWunderBarAddress = exports.selectSearchUrisByQuery = exports.selectIsSearching = exports.selectSearchValue = exports.selectSearchQuery = exports.makeSelectSearchUris = exports.selectSearchState = exports.selectNavLinks = exports.selectActiveHistoryEntry = exports.selectHistoryStack = exports.selectHistoryIndex = exports.selectIsForwardDisabled = exports.selectIsBackDisabled = exports.selectPathAfterAuth = exports.selectPageTitle = exports.selectHeaderLinks = exports.selectCurrentParams = exports.selectCurrentPage = exports.selectCurrentPath = exports.makeSelectCurrentParam = exports.computePageFromPath = exports.selectSearchDownloadUris = exports.selectTotalDownloadProgress = exports.selectDownloadingFileInfos = exports.selectFileInfosDownloaded = exports.selectUrisLoading = exports.selectDownloadingByOutpoint = exports.selectIsFetchingFileListDownloadedOrPublished = exports.selectIsFetchingFileList = exports.selectFileInfosByOutpoint = exports.makeSelectLoadingForUri = exports.makeSelectDownloadingForUri = exports.makeSelectFileInfoForUri = exports.selectFetchingCostInfo = exports.selectCostForCurrentPageUri = undefined; -exports.selectAllCostInfoByUri = exports.makeSelectCostInfoForUri = exports.makeSelectFetchingCostInfoForUri = exports.selectRewardContentClaimIds = exports.selectChannelClaimCounts = exports.selectPlayingUri = exports.selectFetchingTrendingUris = exports.selectTrendingUris = exports.selectFetchingFeaturedUris = exports.selectFeaturedUris = exports.selectResolvingUris = exports.selectMyChannelClaims = exports.selectFetchingMyChannels = exports.selectMyClaimsOutpoints = exports.selectAllMyClaimsByOutpoint = exports.selectMyClaimsWithoutChannels = exports.selectMyClaims = exports.selectPendingClaims = exports.selectIsFetchingClaimListMine = exports.selectAllFetchingChannelClaims = exports.selectMyActiveClaims = exports.selectAbandoningIds = exports.selectMyClaimsRaw = exports.selectAllClaimsByChannel = exports.selectClaimsByUri = exports.selectClaimsById = exports.makeSelectTotalPagesForChannel = exports.makeSelectTotalItemsForChannel = exports.makeSelectIsUriResolving = exports.makeSelectContentTypeForUri = exports.makeSelectTitleForUri = exports.makeSelectMetadataForUri = exports.makeSelectClaimsInChannelForPage = exports.makeSelectClaimsInChannelForCurrentPage = exports.makeSelectFetchingChannelClaims = exports.makeSelectClaimIsMine = exports.makeSelectClaimForUri = exports.selectSnack = exports.selectNotificationProps = exports.selectNotification = exports.selectBlackListedOutpoints = exports.blacklistReducer = exports.walletReducer = exports.searchReducer = exports.notificationsReducer = exports.fileInfoReducer = exports.costInfoReducer = exports.claimsReducer = exports.formatFullPrice = exports.formatCredits = exports.toQueryString = exports.parseQueryParams = exports.batchActions = exports.doSendSupport = exports.doSetDraftTransactionAddress = exports.doSetDraftTransactionAmount = exports.doSendDraftTransaction = exports.doCheckAddressIsMine = exports.doGetNewAddress = exports.doFetchBlock = exports.doFetchTransactions = exports.doBalanceSubscribe = exports.doUpdateBalance = exports.doBlackListedOutpointsSubscribe = exports.doBlurSearchInput = exports.doFocusSearchInput = exports.doUpdateSearchQuery = exports.doSearch = exports.doFetchFileInfosAndPublishedClaims = exports.doFileList = exports.doFetchFileInfo = exports.doFetchCostInfoForUri = exports.doFetchRewardedContent = exports.doFetchTrendingUris = exports.doFetchFeaturedUris = exports.doResolveUri = exports.doResolveUris = exports.doAbandonClaim = exports.doFetchClaimListMine = exports.doFetchClaimCountByChannel = exports.doFetchClaimsByChannel = exports.doHideNotification = exports.doNotify = exports.convertToShareLink = exports.isNameValid = exports.isURIClaimable = exports.isURIValid = exports.normalizeURI = exports.buildURI = exports.parseURI = exports.regexAddress = exports.regexInvalidURI = exports.Lbryapi = exports.Lbry = exports.SETTINGS = exports.SEARCH_TYPES = exports.THUMBNAIL_STATUSES = exports.MODALS = exports.ACTIONS = exports.Notification = undefined; +exports.selectWalletUnlockResult = exports.selectWalletUnlockSucceeded = exports.selectWalletUnlockPending = exports.selectWalletDecryptResult = exports.selectWalletDecryptSucceeded = exports.selectWalletDecryptPending = exports.selectWalletEncryptResult = exports.selectWalletEncryptSucceeded = exports.selectWalletEncryptPending = exports.selectWalletState = exports.selectWalletIsEncrypted = exports.selectBlocks = exports.selectDraftTransactionError = exports.selectDraftTransactionAddress = exports.selectDraftTransactionAmount = exports.selectDraftTransaction = exports.selectGettingNewAddress = exports.selectReceiveAddress = exports.selectIsSendingSupport = exports.selectIsFetchingTransactions = exports.selectHasTransactions = exports.selectRecentTransactions = exports.selectTransactionItems = exports.selectTransactionsById = exports.selectBalance = exports.makeSelectBlockDate = exports.selectSearchSuggestions = exports.selectSearchBarFocused = exports.selectWunderBarAddress = exports.selectSearchUrisByQuery = exports.selectIsSearching = exports.selectSearchValue = exports.selectSearchQuery = exports.makeSelectSearchUris = exports.selectSearchState = exports.selectActiveHistoryEntry = exports.selectHistoryStack = exports.selectHistoryIndex = exports.selectIsForwardDisabled = exports.selectIsBackDisabled = exports.selectPathAfterAuth = exports.selectPageTitle = exports.selectHeaderLinks = exports.selectCurrentParams = exports.selectCurrentPage = exports.selectCurrentPath = exports.makeSelectCurrentParam = exports.computePageFromPath = exports.selectSearchDownloadUris = exports.selectTotalDownloadProgress = exports.selectDownloadingFileInfos = exports.selectFileInfosDownloaded = exports.selectUrisLoading = exports.selectDownloadingByOutpoint = exports.selectIsFetchingFileListDownloadedOrPublished = exports.selectIsFetchingFileList = exports.selectFileInfosByOutpoint = exports.makeSelectLoadingForUri = exports.makeSelectDownloadingForUri = exports.makeSelectFileInfoForUri = exports.selectFetchingCostInfo = exports.selectCostForCurrentPageUri = exports.selectAllCostInfoByUri = exports.makeSelectCostInfoForUri = exports.makeSelectFetchingCostInfoForUri = exports.selectChannelClaimCounts = exports.selectPlayingUri = exports.selectFetchingTrendingUris = undefined; +exports.selectTrendingUris = exports.selectFetchingFeaturedUris = exports.selectFeaturedUris = exports.selectResolvingUris = exports.selectMyChannelClaims = exports.selectFetchingMyChannels = exports.selectMyClaimsOutpoints = exports.selectAllMyClaimsByOutpoint = exports.selectMyClaimsWithoutChannels = exports.selectMyClaims = exports.selectPendingClaims = exports.selectIsFetchingClaimListMine = exports.selectAllFetchingChannelClaims = exports.selectMyActiveClaims = exports.selectAbandoningIds = exports.selectMyClaimsRaw = exports.selectAllClaimsByChannel = exports.selectClaimsByUri = exports.selectClaimsById = exports.makeSelectRecommendedContentForUri = exports.makeSelectNsfwCountForChannel = exports.makeSelectNsfwCountFromUris = exports.makeSelectTotalPagesForChannel = exports.makeSelectTotalItemsForChannel = exports.makeSelectIsUriResolving = exports.makeSelectContentTypeForUri = exports.makeSelectTitleForUri = exports.makeSelectMetadataForUri = exports.makeSelectClaimsInChannelForPage = exports.makeSelectClaimsInChannelForCurrentPage = exports.makeSelectFetchingChannelClaims = exports.makeSelectClaimIsMine = exports.makeSelectClaimForUri = exports.selectSnack = exports.selectNotificationProps = exports.selectNotification = exports.selectBlackListedOutpoints = exports.blacklistReducer = exports.walletReducer = exports.searchReducer = exports.notificationsReducer = exports.fileInfoReducer = exports.costInfoReducer = exports.claimsReducer = exports.formatFullPrice = exports.formatCredits = exports.toQueryString = exports.parseQueryParams = exports.batchActions = exports.doWalletStatus = exports.doWalletUnlock = exports.doWalletDecrypt = exports.doWalletEncrypt = exports.doSendSupport = exports.doSetDraftTransactionAddress = exports.doSetDraftTransactionAmount = exports.doSendDraftTransaction = exports.doCheckAddressIsMine = exports.doGetNewAddress = exports.doFetchBlock = exports.doFetchTransactions = exports.doBalanceSubscribe = exports.doUpdateBalance = exports.doBlackListedOutpointsSubscribe = exports.doBlurSearchInput = exports.doFocusSearchInput = exports.doUpdateSearchQuery = exports.doSearch = exports.doFetchFileInfosAndPublishedClaims = exports.doFileList = exports.doFetchFileInfo = exports.doFetchCostInfoForUri = exports.doFetchTrendingUris = exports.doFetchFeaturedUris = exports.doResolveUri = exports.doResolveUris = exports.doAbandonClaim = exports.doFetchClaimListMine = exports.doFetchClaimCountByChannel = exports.doFetchClaimsByChannel = exports.doHideNotification = exports.doNotify = exports.convertToShareLink = exports.isNameValid = exports.isURIClaimable = exports.isURIValid = exports.normalizeURI = exports.buildURI = exports.parseURI = exports.regexAddress = exports.regexInvalidURI = exports.Lbryapi = exports.Lbry = exports.TRANSACTIONS = exports.SETTINGS = exports.SEARCH_TYPES = exports.THUMBNAIL_STATUSES = exports.MODALS = exports.ACTIONS = exports.Notification = undefined; var _Notification = __webpack_require__(1); @@ -1253,14 +1268,8 @@ Object.defineProperty(exports, 'doFetchTrendingUris', { return _claims.doFetchTrendingUris; } }); -Object.defineProperty(exports, 'doFetchRewardedContent', { - enumerable: true, - get: function get() { - return _claims.doFetchRewardedContent; - } -}); -var _cost_info = __webpack_require__(19); +var _cost_info = __webpack_require__(22); Object.defineProperty(exports, 'doFetchCostInfoForUri', { enumerable: true, @@ -1269,7 +1278,7 @@ Object.defineProperty(exports, 'doFetchCostInfoForUri', { } }); -var _file_info = __webpack_require__(20); +var _file_info = __webpack_require__(23); Object.defineProperty(exports, 'doFetchFileInfo', { enumerable: true, @@ -1290,7 +1299,7 @@ Object.defineProperty(exports, 'doFetchFileInfosAndPublishedClaims', { } }); -var _search = __webpack_require__(22); +var _search = __webpack_require__(25); Object.defineProperty(exports, 'doSearch', { enumerable: true, @@ -1317,7 +1326,7 @@ Object.defineProperty(exports, 'doBlurSearchInput', { } }); -var _blacklist = __webpack_require__(26); +var _blacklist = __webpack_require__(27); Object.defineProperty(exports, 'doBlackListedOutpointsSubscribe', { enumerable: true, @@ -1326,7 +1335,7 @@ Object.defineProperty(exports, 'doBlackListedOutpointsSubscribe', { } }); -var _wallet = __webpack_require__(27); +var _wallet = __webpack_require__(28); Object.defineProperty(exports, 'doUpdateBalance', { enumerable: true, @@ -1388,8 +1397,32 @@ Object.defineProperty(exports, 'doSendSupport', { return _wallet.doSendSupport; } }); +Object.defineProperty(exports, 'doWalletEncrypt', { + enumerable: true, + get: function get() { + return _wallet.doWalletEncrypt; + } +}); +Object.defineProperty(exports, 'doWalletDecrypt', { + enumerable: true, + get: function get() { + return _wallet.doWalletDecrypt; + } +}); +Object.defineProperty(exports, 'doWalletUnlock', { + enumerable: true, + get: function get() { + return _wallet.doWalletUnlock; + } +}); +Object.defineProperty(exports, 'doWalletStatus', { + enumerable: true, + get: function get() { + return _wallet.doWalletStatus; + } +}); -var _batchActions = __webpack_require__(18); +var _batchActions = __webpack_require__(21); Object.defineProperty(exports, 'batchActions', { enumerable: true, @@ -1413,7 +1446,7 @@ Object.defineProperty(exports, 'toQueryString', { } }); -var _formatCredits = __webpack_require__(29); +var _formatCredits = __webpack_require__(31); Object.defineProperty(exports, 'formatCredits', { enumerable: true, @@ -1428,7 +1461,7 @@ Object.defineProperty(exports, 'formatFullPrice', { } }); -var _claims2 = __webpack_require__(30); +var _claims2 = __webpack_require__(32); Object.defineProperty(exports, 'claimsReducer', { enumerable: true, @@ -1437,7 +1470,7 @@ Object.defineProperty(exports, 'claimsReducer', { } }); -var _cost_info2 = __webpack_require__(31); +var _cost_info2 = __webpack_require__(33); Object.defineProperty(exports, 'costInfoReducer', { enumerable: true, @@ -1446,7 +1479,7 @@ Object.defineProperty(exports, 'costInfoReducer', { } }); -var _file_info2 = __webpack_require__(32); +var _file_info2 = __webpack_require__(34); Object.defineProperty(exports, 'fileInfoReducer', { enumerable: true, @@ -1455,7 +1488,7 @@ Object.defineProperty(exports, 'fileInfoReducer', { } }); -var _notifications2 = __webpack_require__(33); +var _notifications2 = __webpack_require__(35); Object.defineProperty(exports, 'notificationsReducer', { enumerable: true, @@ -1464,7 +1497,7 @@ Object.defineProperty(exports, 'notificationsReducer', { } }); -var _search2 = __webpack_require__(35); +var _search2 = __webpack_require__(37); Object.defineProperty(exports, 'searchReducer', { enumerable: true, @@ -1473,7 +1506,7 @@ Object.defineProperty(exports, 'searchReducer', { } }); -var _wallet2 = __webpack_require__(37); +var _wallet2 = __webpack_require__(39); Object.defineProperty(exports, 'walletReducer', { enumerable: true, @@ -1482,7 +1515,7 @@ Object.defineProperty(exports, 'walletReducer', { } }); -var _blacklist2 = __webpack_require__(38); +var _blacklist2 = __webpack_require__(40); Object.defineProperty(exports, 'blacklistReducer', { enumerable: true, @@ -1491,7 +1524,7 @@ Object.defineProperty(exports, 'blacklistReducer', { } }); -var _blacklist3 = __webpack_require__(39); +var _blacklist3 = __webpack_require__(41); Object.defineProperty(exports, 'selectBlackListedOutpoints', { enumerable: true, @@ -1500,7 +1533,7 @@ Object.defineProperty(exports, 'selectBlackListedOutpoints', { } }); -var _notifications3 = __webpack_require__(40); +var _notifications3 = __webpack_require__(42); Object.defineProperty(exports, 'selectNotification', { enumerable: true, @@ -1589,6 +1622,24 @@ Object.defineProperty(exports, 'makeSelectTotalPagesForChannel', { return _claims3.makeSelectTotalPagesForChannel; } }); +Object.defineProperty(exports, 'makeSelectNsfwCountFromUris', { + enumerable: true, + get: function get() { + return _claims3.makeSelectNsfwCountFromUris; + } +}); +Object.defineProperty(exports, 'makeSelectNsfwCountForChannel', { + enumerable: true, + get: function get() { + return _claims3.makeSelectNsfwCountForChannel; + } +}); +Object.defineProperty(exports, 'makeSelectRecommendedContentForUri', { + enumerable: true, + get: function get() { + return _claims3.makeSelectRecommendedContentForUri; + } +}); Object.defineProperty(exports, 'selectClaimsById', { enumerable: true, get: function get() { @@ -1721,14 +1772,8 @@ Object.defineProperty(exports, 'selectChannelClaimCounts', { return _claims3.selectChannelClaimCounts; } }); -Object.defineProperty(exports, 'selectRewardContentClaimIds', { - enumerable: true, - get: function get() { - return _claims3.selectRewardContentClaimIds; - } -}); -var _cost_info3 = __webpack_require__(41); +var _cost_info3 = __webpack_require__(43); Object.defineProperty(exports, 'makeSelectFetchingCostInfoForUri', { enumerable: true, @@ -1761,7 +1806,7 @@ Object.defineProperty(exports, 'selectFetchingCostInfo', { } }); -var _file_info3 = __webpack_require__(21); +var _file_info3 = __webpack_require__(24); Object.defineProperty(exports, 'makeSelectFileInfoForUri', { enumerable: true, @@ -1916,14 +1961,8 @@ Object.defineProperty(exports, 'selectActiveHistoryEntry', { return _navigation.selectActiveHistoryEntry; } }); -Object.defineProperty(exports, 'selectNavLinks', { - enumerable: true, - get: function get() { - return _navigation.selectNavLinks; - } -}); -var _search3 = __webpack_require__(24); +var _search3 = __webpack_require__(18); Object.defineProperty(exports, 'makeSelectSearchUris', { enumerable: true, @@ -1967,8 +2006,14 @@ Object.defineProperty(exports, 'selectSearchBarFocused', { return _search3.selectSearchBarFocused; } }); +Object.defineProperty(exports, 'selectSearchSuggestions', { + enumerable: true, + get: function get() { + return _search3.selectSearchSuggestions; + } +}); -var _wallet3 = __webpack_require__(28); +var _wallet3 = __webpack_require__(29); Object.defineProperty(exports, 'makeSelectBlockDate', { enumerable: true, @@ -2060,27 +2105,97 @@ Object.defineProperty(exports, 'selectBlocks', { return _wallet3.selectBlocks; } }); +Object.defineProperty(exports, 'selectWalletIsEncrypted', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletIsEncrypted; + } +}); +Object.defineProperty(exports, 'selectWalletState', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletState; + } +}); +Object.defineProperty(exports, 'selectWalletEncryptPending', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletEncryptPending; + } +}); +Object.defineProperty(exports, 'selectWalletEncryptSucceeded', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletEncryptSucceeded; + } +}); +Object.defineProperty(exports, 'selectWalletEncryptResult', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletEncryptResult; + } +}); +Object.defineProperty(exports, 'selectWalletDecryptPending', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletDecryptPending; + } +}); +Object.defineProperty(exports, 'selectWalletDecryptSucceeded', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletDecryptSucceeded; + } +}); +Object.defineProperty(exports, 'selectWalletDecryptResult', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletDecryptResult; + } +}); +Object.defineProperty(exports, 'selectWalletUnlockPending', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletUnlockPending; + } +}); +Object.defineProperty(exports, 'selectWalletUnlockSucceeded', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletUnlockSucceeded; + } +}); +Object.defineProperty(exports, 'selectWalletUnlockResult', { + enumerable: true, + get: function get() { + return _wallet3.selectWalletUnlockResult; + } +}); var _action_types = __webpack_require__(4); var ACTIONS = _interopRequireWildcard(_action_types); -var _modal_types = __webpack_require__(34); +var _modal_types = __webpack_require__(36); var MODALS = _interopRequireWildcard(_modal_types); -var _thumbnail_upload_statuses = __webpack_require__(42); +var _thumbnail_upload_statuses = __webpack_require__(44); var THUMBNAIL_STATUSES = _interopRequireWildcard(_thumbnail_upload_statuses); -var _search4 = __webpack_require__(23); +var _search4 = __webpack_require__(19); var SEARCH_TYPES = _interopRequireWildcard(_search4); -var _settings = __webpack_require__(43); +var _settings = __webpack_require__(45); var SETTINGS = _interopRequireWildcard(_settings); +var _transaction_types = __webpack_require__(30); + +var TRANSACTIONS = _interopRequireWildcard(_transaction_types); + var _lbry = __webpack_require__(6); var _lbry2 = _interopRequireDefault(_lbry); @@ -2099,6 +2214,7 @@ exports.MODALS = MODALS; exports.THUMBNAIL_STATUSES = THUMBNAIL_STATUSES; exports.SEARCH_TYPES = SEARCH_TYPES; exports.SETTINGS = SETTINGS; +exports.TRANSACTIONS = TRANSACTIONS; // common @@ -2404,14 +2520,9 @@ var _action_types = __webpack_require__(4); var ACTIONS = _interopRequireWildcard(_action_types); -var _Notification = __webpack_require__(1); - -var _Notification2 = _interopRequireDefault(_Notification); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } +/*:: import type { Notification, NotificationProps } from 'types/Notification';*/ function doNotify(notification /*: Notification*/, notificationProps /*: NotificationProps*/) { return { type: ACTIONS.CREATE_NOTIFICATION, @@ -2467,6 +2578,7 @@ var SKIP_UPGRADE = exports.SKIP_UPGRADE = 'SKIP_UPGRADE'; var START_UPGRADE = exports.START_UPGRADE = 'START_UPGRADE'; var AUTO_UPDATE_DECLINED = exports.AUTO_UPDATE_DECLINED = 'AUTO_UPDATE_DECLINED'; var AUTO_UPDATE_DOWNLOADED = exports.AUTO_UPDATE_DOWNLOADED = 'AUTO_UPDATE_DOWNLOADED'; +var CLEAR_UPGRADE_TIMER = exports.CLEAR_UPGRADE_TIMER = 'CLEAR_UPGRADE_TIMER'; // Wallet var GET_NEW_ADDRESS_STARTED = exports.GET_NEW_ADDRESS_STARTED = 'GET_NEW_ADDRESS_STARTED'; @@ -2483,6 +2595,20 @@ var FETCH_BLOCK_SUCCESS = exports.FETCH_BLOCK_SUCCESS = 'FETCH_BLOCK_SUCCESS'; var SUPPORT_TRANSACTION_STARTED = exports.SUPPORT_TRANSACTION_STARTED = 'SUPPORT_TRANSACTION_STARTED'; var SUPPORT_TRANSACTION_COMPLETED = exports.SUPPORT_TRANSACTION_COMPLETED = 'SUPPORT_TRANSACTION_COMPLETED'; var SUPPORT_TRANSACTION_FAILED = exports.SUPPORT_TRANSACTION_FAILED = 'SUPPORT_TRANSACTION_FAILED'; +var WALLET_ENCRYPT_START = exports.WALLET_ENCRYPT_START = 'WALLET_ENCRYPT_START'; +var WALLET_ENCRYPT_COMPLETED = exports.WALLET_ENCRYPT_COMPLETED = 'WALLET_ENCRYPT_COMPLETED'; +var WALLET_ENCRYPT_FAILED = exports.WALLET_ENCRYPT_FAILED = 'WALLET_ENCRYPT_FAILED'; +var WALLET_UNLOCK_START = exports.WALLET_UNLOCK_START = 'WALLET_UNLOCK_START'; +var WALLET_UNLOCK_COMPLETED = exports.WALLET_UNLOCK_COMPLETED = 'WALLET_UNLOCK_COMPLETED'; +var WALLET_UNLOCK_FAILED = exports.WALLET_UNLOCK_FAILED = 'WALLET_UNLOCK_FAILED'; +var WALLET_DECRYPT_START = exports.WALLET_DECRYPT_START = 'WALLET_DECRYPT_START'; +var WALLET_DECRYPT_COMPLETED = exports.WALLET_DECRYPT_COMPLETED = 'WALLET_DECRYPT_COMPLETED'; +var WALLET_DECRYPT_FAILED = exports.WALLET_DECRYPT_FAILED = 'WALLET_DECRYPT_FAILED'; +var WALLET_LOCK_START = exports.WALLET_LOCK_START = 'WALLET_LOCK_START'; +var WALLET_LOCK_COMPLETED = exports.WALLET_LOCK_COMPLETED = 'WALLET_LOCK_COMPLETED'; +var WALLET_LOCK_FAILED = exports.WALLET_LOCK_FAILED = 'WALLET_LOCK_FAILED'; +var WALLET_STATUS_START = exports.WALLET_STATUS_START = 'WALLET_STATUS_START'; +var WALLET_STATUS_COMPLETED = exports.WALLET_STATUS_COMPLETED = 'WALLET_STATUS_COMPLETED'; // Claims var FETCH_FEATURED_CONTENT_STARTED = exports.FETCH_FEATURED_CONTENT_STARTED = 'FETCH_FEATURED_CONTENT_STARTED'; @@ -2506,11 +2632,15 @@ var CREATE_CHANNEL_COMPLETED = exports.CREATE_CHANNEL_COMPLETED = 'CREATE_CHANNE var PUBLISH_STARTED = exports.PUBLISH_STARTED = 'PUBLISH_STARTED'; var PUBLISH_COMPLETED = exports.PUBLISH_COMPLETED = 'PUBLISH_COMPLETED'; var PUBLISH_FAILED = exports.PUBLISH_FAILED = 'PUBLISH_FAILED'; -var SET_PLAYING_URI = exports.SET_PLAYING_URI = 'PLAY_URI'; var FETCH_BLACK_LISTED_CONTENT_STARTED = exports.FETCH_BLACK_LISTED_CONTENT_STARTED = 'FETCH_BLACK_LISTED_CONTENT_STARTED'; var FETCH_BLACK_LISTED_CONTENT_COMPLETED = exports.FETCH_BLACK_LISTED_CONTENT_COMPLETED = 'FETCH_BLACK_LISTED_CONTENT_COMPLETED'; var FETCH_BLACK_LISTED_CONTENT_FAILED = exports.FETCH_BLACK_LISTED_CONTENT_FAILED = 'FETCH_BLACK_LISTED_CONTENT_FAILED'; var BLACK_LISTED_CONTENT_SUBSCRIBE = exports.BLACK_LISTED_CONTENT_SUBSCRIBE = 'BLACK_LISTED_CONTENT_SUBSCRIBE'; +var SET_PLAYING_URI = exports.SET_PLAYING_URI = 'SET_PLAYING_URI'; +var SET_CONTENT_POSITION = exports.SET_CONTENT_POSITION = 'SET_CONTENT_POSITION'; +var SET_CONTENT_LAST_VIEWED = exports.SET_CONTENT_LAST_VIEWED = 'SET_CONTENT_LAST_VIEWED'; +var CLEAR_CONTENT_HISTORY_URI = exports.CLEAR_CONTENT_HISTORY_URI = 'CLEAR_CONTENT_HISTORY_URI'; +var CLEAR_CONTENT_HISTORY_ALL = exports.CLEAR_CONTENT_HISTORY_ALL = 'CLEAR_CONTENT_HISTORY_ALL'; // Files var FILE_LIST_STARTED = exports.FILE_LIST_STARTED = 'FILE_LIST_STARTED'; @@ -2554,6 +2684,7 @@ var USER_EMAIL_NEW_STARTED = exports.USER_EMAIL_NEW_STARTED = 'USER_EMAIL_NEW_ST var USER_EMAIL_NEW_SUCCESS = exports.USER_EMAIL_NEW_SUCCESS = 'USER_EMAIL_NEW_SUCCESS'; var USER_EMAIL_NEW_EXISTS = exports.USER_EMAIL_NEW_EXISTS = 'USER_EMAIL_NEW_EXISTS'; var USER_EMAIL_NEW_FAILURE = exports.USER_EMAIL_NEW_FAILURE = 'USER_EMAIL_NEW_FAILURE'; +var USER_EMAIL_VERIFY_SET = exports.USER_EMAIL_VERIFY_SET = 'USER_EMAIL_VERIFY_SET'; var USER_EMAIL_VERIFY_STARTED = exports.USER_EMAIL_VERIFY_STARTED = 'USER_EMAIL_VERIFY_STARTED'; var USER_EMAIL_VERIFY_SUCCESS = exports.USER_EMAIL_VERIFY_SUCCESS = 'USER_EMAIL_VERIFY_SUCCESS'; var USER_EMAIL_VERIFY_FAILURE = exports.USER_EMAIL_VERIFY_FAILURE = 'USER_EMAIL_VERIFY_FAILURE'; @@ -2617,14 +2748,6 @@ var CHECK_SUBSCRIPTION_STARTED = exports.CHECK_SUBSCRIPTION_STARTED = 'CHECK_SUB var CHECK_SUBSCRIPTION_COMPLETED = exports.CHECK_SUBSCRIPTION_COMPLETED = 'CHECK_SUBSCRIPTION_COMPLETED'; var CHECK_SUBSCRIPTIONS_SUBSCRIBE = exports.CHECK_SUBSCRIPTIONS_SUBSCRIBE = 'CHECK_SUBSCRIPTIONS_SUBSCRIBE'; -// Video controls -var SET_VIDEO_PAUSE = exports.SET_VIDEO_PAUSE = 'SET_VIDEO_PAUSE'; - -// Media controls -var MEDIA_PLAY = exports.MEDIA_PLAY = 'MEDIA_PLAY'; -var MEDIA_PAUSE = exports.MEDIA_PAUSE = 'MEDIA_PAUSE'; -var MEDIA_POSITION = exports.MEDIA_POSITION = 'MEDIA_POSITION'; - // Publishing var CLEAR_PUBLISH = exports.CLEAR_PUBLISH = 'CLEAR_PUBLISH'; var UPDATE_PUBLISH_FORM = exports.UPDATE_PUBLISH_FORM = 'UPDATE_PUBLISH_FORM'; @@ -2658,7 +2781,6 @@ exports.doFetchClaimListMine = doFetchClaimListMine; exports.doAbandonClaim = doAbandonClaim; exports.doFetchFeaturedUris = doFetchFeaturedUris; exports.doFetchTrendingUris = doFetchTrendingUris; -exports.doFetchRewardedContent = doFetchRewardedContent; exports.doFetchClaimsByChannel = doFetchClaimsByChannel; exports.doFetchClaimCountByChannel = doFetchClaimCountByChannel; @@ -2680,7 +2802,7 @@ var _notifications = __webpack_require__(3); var _claims = __webpack_require__(14); -var _batchActions = __webpack_require__(18); +var _batchActions = __webpack_require__(21); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -2882,32 +3004,6 @@ function doFetchTrendingUris() { }; } -function doFetchRewardedContent() { - return function (dispatch) { - var success = function success(nameToClaimId) { - dispatch({ - type: ACTIONS.FETCH_REWARD_CONTENT_COMPLETED, - data: { - claimIds: Object.values(nameToClaimId), - success: true - } - }); - }; - - var failure = function failure() { - dispatch({ - type: ACTIONS.FETCH_REWARD_CONTENT_COMPLETED, - data: { - claimIds: [], - success: false - } - }); - }; - - _lbryapi2.default.call('reward', 'list_featured').then(success, failure); - }; -} - function doFetchClaimsByChannel(uri, page) { return function (dispatch) { dispatch({ @@ -3023,6 +3119,16 @@ var daemonCallWithResult = function daemonCallWithResult(name) { }); }; +// blobs +Lbry.blob_delete = function () { + var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return daemonCallWithResult('blob_delete', params); +}; +Lbry.blob_list = function () { + var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return daemonCallWithResult('blob_list', params); +}; + // core Lbry.status = function () { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; @@ -3051,10 +3157,20 @@ Lbry.wallet_balance = function () { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return daemonCallWithResult('wallet_balance', params); }; +Lbry.wallet_decrypt = function () { + return daemonCallWithResult('wallet_decrypt', {}); +}; +Lbry.wallet_encrypt = function () { + var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + return daemonCallWithResult('wallet_encrypt', params); +}; Lbry.wallet_is_address_mine = function () { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return daemonCallWithResult('wallet_is_address_mine', params); }; +Lbry.wallet_lock = function () { + return daemonCallWithResult('wallet_lock', {}); +}; Lbry.wallet_new_address = function () { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return daemonCallWithResult('wallet_new_address', params); @@ -3063,17 +3179,13 @@ Lbry.wallet_send = function () { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return daemonCallWithResult('wallet_send', params); }; -Lbry.wallet_encrypt = function () { - var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - return daemonCallWithResult('wallet_encrypt', params); -}; -Lbry.wallet_decrypt = function () { - return daemonCallWithResult('wallet_decrypt', {}); -}; Lbry.wallet_unlock = function () { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return daemonCallWithResult('wallet_unlock', params); }; +Lbry.wallet_unused_address = function () { + return daemonCallWithResult('wallet_unused_address', {}); +}; // transactions Lbry.transaction_list = function () { @@ -3105,12 +3217,9 @@ Lbry.connect = function () { return Lbry.connectPromise; }; -Lbry.getMediaType = function (contentType, fileName) { - if (contentType) { - return (/^[^/]+/.exec(contentType)[0] - ); - } else if (fileName) { - var formats = [[/^.+\.(mp4|m4v|webm|flv|f4v|ogv)$/i, 'video'], [/^.+\.(mp3|m4a|aac|wav|flac|ogg|opus)$/i, 'audio'], [/^.+\.(html|htm|xml|pdf|odf|doc|docx|md|markdown|txt|epub|org)$/i, 'document'], [/^.+\.(stl|obj|fbx|gcode)$/i, '3D-file']]; +Lbry.getMediaType = function (contentType, extname) { + if (extname) { + var formats = [[/^(mp4|m4v|webm|flv|f4v|ogv)$/i, 'video'], [/^(mp3|m4a|aac|wav|flac|ogg|opus)$/i, 'audio'], [/^(html|htm|xml|pdf|odf|doc|docx|md|markdown|txt|epub|org)$/i, 'document'], [/^(stl|obj|fbx|gcode)$/i, '3D-file']]; var res = formats.reduce(function (ret, testpair) { switch (testpair[0].test(ret)) { case true: @@ -3118,8 +3227,11 @@ Lbry.getMediaType = function (contentType, fileName) { default: return ret; } - }, fileName); - return res === fileName ? 'unknown' : res; + }, extname); + return res === extname ? 'unknown' : res; + } else if (contentType) { + return (/^[^/]+/.exec(contentType)[0] + ); } return 'unknown'; }; @@ -3377,26 +3489,26 @@ exports.default = lbryProxy; /* 8 */ /***/ (function(module, exports) { -var g; - -// This works in non-strict mode -g = (function() { - return this; -})(); - -try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1, eval)("this"); -} catch (e) { - // This works if the window reference is available - if (typeof window === "object") g = window; -} - -// g can still be undefined, but nothing to do about it... -// We return undefined, instead of nothing here, so it's -// easier to handle this case. if(!global) { ...} - -module.exports = g; +var g; + +// This works in non-strict mode +g = (function() { + return this; +})(); + +try { + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1, eval)("this"); +} catch (e) { + // This works if the window reference is available + if (typeof window === "object") g = window; +} + +// g can still be undefined, but nothing to do about it... +// We return undefined, instead of nothing here, so it's +// easier to handle this case. if(!global) { ...} + +module.exports = g; /***/ }), @@ -3899,14 +4011,18 @@ var objectKeys = Object.keys || function (obj) { Object.defineProperty(exports, "__esModule", { value: true }); -exports.selectRewardContentClaimIds = exports.makeSelectTotalPagesForChannel = exports.makeSelectTotalItemsForChannel = exports.selectChannelClaimCounts = exports.selectPlayingUri = exports.selectFetchingTrendingUris = exports.selectTrendingUris = exports.selectFetchingFeaturedUris = exports.selectFeaturedUris = exports.makeSelectIsUriResolving = exports.selectResolvingUris = exports.selectMyChannelClaims = exports.selectFetchingMyChannels = exports.selectMyClaimsOutpoints = exports.selectAllMyClaimsByOutpoint = exports.selectMyClaimsWithoutChannels = exports.selectMyClaims = exports.selectPendingClaims = exports.selectIsFetchingClaimListMine = exports.makeSelectContentTypeForUri = exports.makeSelectTitleForUri = exports.makeSelectMetadataForUri = exports.makeSelectClaimsInChannelForCurrentPage = exports.makeSelectClaimsInChannelForPage = exports.makeSelectFetchingChannelClaims = exports.selectAllFetchingChannelClaims = exports.makeSelectClaimIsMine = exports.selectMyActiveClaims = exports.selectAbandoningIds = exports.selectMyClaimsRaw = exports.makeSelectClaimForUri = exports.selectAllClaimsByChannel = exports.selectClaimsByUri = exports.selectClaimsById = undefined; +exports.makeSelectRecommendedContentForUri = exports.makeSelectNsfwCountForChannel = exports.makeSelectNsfwCountFromUris = exports.makeSelectTotalPagesForChannel = exports.makeSelectTotalItemsForChannel = exports.selectChannelClaimCounts = exports.selectPlayingUri = exports.selectFetchingTrendingUris = exports.selectTrendingUris = exports.selectFetchingFeaturedUris = exports.selectFeaturedUris = exports.makeSelectIsUriResolving = exports.selectResolvingUris = exports.selectMyChannelClaims = exports.selectFetchingMyChannels = exports.selectMyClaimsOutpoints = exports.selectAllMyClaimsByOutpoint = exports.selectMyClaimsWithoutChannels = exports.selectMyClaims = exports.selectPendingClaims = exports.selectIsFetchingClaimListMine = exports.makeSelectContentTypeForUri = exports.makeSelectTitleForUri = exports.makeSelectMetadataForUri = exports.makeSelectClaimsInChannelForCurrentPage = exports.makeSelectClaimsInChannelForPage = exports.makeSelectFetchingChannelClaims = exports.selectAllFetchingChannelClaims = exports.makeSelectClaimIsMine = exports.selectMyActiveClaims = exports.selectAbandoningIds = exports.selectMyClaimsRaw = exports.makeSelectClaimForUri = exports.selectAllClaimsByChannel = exports.selectClaimsByUri = exports.selectClaimsById = undefined; var _lbryURI = __webpack_require__(2); var _navigation = __webpack_require__(15); +var _search = __webpack_require__(18); + var _reselect = __webpack_require__(16); +var _claim = __webpack_require__(20); + function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var selectState = function selectState(state) { @@ -4081,7 +4197,7 @@ var selectMyChannelClaims = exports.selectMyChannelClaims = (0, _reselect.create ids.forEach(function (id) { if (byId[id]) { - // I'm not sure why this check is necessary, but it ought to be a quick fix for https://github.com/lbryio/lbry-app/issues/544 + // I'm not sure why this check is necessary, but it ought to be a quick fix for https://github.com/lbryio/lbry-desktop/issues/544 claims.push(byId[id]); } }); @@ -4135,9 +4251,63 @@ var makeSelectTotalPagesForChannel = exports.makeSelectTotalPagesForChannel = fu }); }; -var selectRewardContentClaimIds = exports.selectRewardContentClaimIds = (0, _reselect.createSelector)(selectState, function (state) { - return state.rewardedContentClaimIds; -}); +var makeSelectNsfwCountFromUris = exports.makeSelectNsfwCountFromUris = function makeSelectNsfwCountFromUris(uris) { + return (0, _reselect.createSelector)(selectClaimsByUri, function (claims) { + return uris.reduce(function (acc, uri) { + var claim = claims[uri]; + if ((0, _claim.isClaimNsfw)(claim)) { + return acc + 1; + } + return acc; + }, 0); + }); +}; + +var makeSelectNsfwCountForChannel = exports.makeSelectNsfwCountForChannel = function makeSelectNsfwCountForChannel(uri) { + var pageSelector = (0, _navigation.makeSelectCurrentParam)('page'); + + return (0, _reselect.createSelector)(selectClaimsById, selectAllClaimsByChannel, pageSelector, function (byId, allClaims, page) { + var byChannel = allClaims[uri] || {}; + var claimIds = byChannel[page || 1]; + + if (!claimIds) return 0; + + return claimIds.reduce(function (acc, claimId) { + var claim = byId[claimId]; + if ((0, _claim.isClaimNsfw)(claim)) { + return acc + 1; + } + return acc; + }, 0); + }); +}; + +var makeSelectRecommendedContentForUri = exports.makeSelectRecommendedContentForUri = function makeSelectRecommendedContentForUri(uri) { + return (0, _reselect.createSelector)(makeSelectClaimForUri(uri), _search.selectSearchUrisByQuery, function (claim, searchUrisByQuery) { + var atVanityURI = !uri.includes('#'); + + var recommendedContent = void 0; + if (claim) { + var title = claim.value.stream.metadata.title; + + var searchUris = searchUrisByQuery[title.replace(/\//, ' ')]; + if (searchUris) { + // If we are at a vanity uri, we can't do a uri match + // The first search result _should_ be the same as the claim a user is on + if (atVanityURI) { + searchUris = searchUris.slice(1); + } + + searchUris = searchUris.filter(function (searchUri) { + return searchUri !== uri; + }); + recommendedContent = searchUris; + } + } + + return recommendedContent; + }); +}; /***/ }), /* 15 */ @@ -4149,7 +4319,7 @@ var selectRewardContentClaimIds = exports.selectRewardContentClaimIds = (0, _res Object.defineProperty(exports, "__esModule", { value: true }); -exports.selectNavLinks = exports.selectPageTitle = exports.selectActiveHistoryEntry = exports.selectHistoryStack = exports.selectHistoryIndex = exports.selectIsHome = exports.selectIsForwardDisabled = exports.selectIsBackDisabled = exports.selectPathAfterAuth = exports.makeSelectCurrentParam = exports.selectCurrentParams = exports.selectCurrentPage = exports.computePageFromPath = exports.selectCurrentPath = exports.selectState = undefined; +exports.selectPageTitle = exports.selectActiveHistoryEntry = exports.selectHistoryStack = exports.selectHistoryIndex = exports.selectIsHome = exports.selectIsForwardDisabled = exports.selectIsBackDisabled = exports.selectPathAfterAuth = exports.makeSelectCurrentParam = exports.selectCurrentParams = exports.selectCurrentPage = exports.computePageFromPath = exports.selectCurrentPath = exports.selectState = undefined; var _reselect = __webpack_require__(16); @@ -4220,132 +4390,6 @@ var selectPageTitle = exports.selectPageTitle = (0, _reselect.createSelector)(se } }); -var selectNavLinks = exports.selectNavLinks = (0, _reselect.createSelector)(selectCurrentPage, selectHistoryStack, function (currentPage, historyStack) { - var isWalletPage = function isWalletPage(page) { - return page === 'wallet' || page === 'send' || page === 'getcredits' || page === 'rewards' || page === 'history' || page === 'invite' || page === 'backup'; - }; - - var isMyLbryPage = function isMyLbryPage(page) { - return page === 'downloaded' || page === 'published'; - }; - - var previousStack = historyStack.slice().reverse(); - - var getPreviousSubLinkPath = function getPreviousSubLinkPath(checkIfValidPage) { - for (var i = 0; i < previousStack.length; i += 1) { - var currentStackItem = previousStack[i]; - - // Trim off the "/" from the path - var pageInStack = currentStackItem.path.slice(1); - if (checkIfValidPage(pageInStack)) { - return currentStackItem.path; - } - } - - return undefined; - }; - - // Gets the last active sublink in a section - var getActiveSublink = function getActiveSublink(category) { - if (category === 'wallet') { - var previousPath = getPreviousSubLinkPath(isWalletPage); - return previousPath || '/wallet'; - } else if (category === 'myLbry') { - var _previousPath = getPreviousSubLinkPath(isMyLbryPage); - return _previousPath || '/downloaded'; - } - - return undefined; - }; - - var isCurrentlyWalletPage = isWalletPage(currentPage); - var isCurrentlyMyLbryPage = isMyLbryPage(currentPage); - - var walletSubLinks = [{ - label: 'Overview', - path: '/wallet', - active: currentPage === 'wallet' - }, { - label: 'Send & Receive', - path: '/send', - active: currentPage === 'send' - }, { - label: 'Transactions', - path: '/history', - active: currentPage === 'history' - }, { - label: 'Get Credits', - path: '/getcredits', - active: currentPage === 'getcredits' - }, { - label: 'Rewards', - path: '/rewards', - active: currentPage === 'rewards' - }, { - label: 'Invites', - path: '/invite', - active: currentPage === 'invite' - }, { - label: 'Backup', - path: '/backup', - active: currentPage === 'backup' - }]; - - var myLbrySubLinks = [{ - label: 'Downloads', - path: '/downloaded', - active: currentPage === 'downloaded' - }, { - label: 'Publishes', - path: '/published', - active: currentPage === 'published' - }]; - - var navLinks = { - primary: [{ - label: 'Explore', - path: '/discover', - active: currentPage === 'discover', - icon: 'Compass' - }, { - label: 'Subscriptions', - path: '/subscriptions', - active: currentPage === 'subscriptions', - icon: 'AtSign' - }], - secondary: [{ - label: 'Wallet', - icon: 'CreditCard', - subLinks: walletSubLinks, - path: isCurrentlyWalletPage ? '/wallet' : getActiveSublink('wallet'), - active: isWalletPage(currentPage) - }, { - label: 'My LBRY', - icon: 'Folder', - subLinks: myLbrySubLinks, - path: isCurrentlyMyLbryPage ? '/downloaded' : getActiveSublink('myLbry'), - active: isMyLbryPage(currentPage) - }, { - label: 'Publish', - icon: 'UploadCloud', - path: '/publish', - active: currentPage === 'publish' - }, { - label: 'Settings', - icon: 'Settings', - path: '/settings', - active: currentPage === 'settings' - }, { - label: 'Help', - path: '/help', - icon: 'HelpCircle', - active: currentPage === 'help' - }] - }; - - return navLinks; -}); - /***/ }), /* 16 */ /***/ (function(module, exports, __webpack_require__) { @@ -4529,6 +4573,178 @@ function toQueryString(params) { "use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.selectSearchSuggestions = exports.selectSearchBarFocused = exports.selectWunderBarAddress = exports.makeSelectSearchUris = exports.selectSearchUrisByQuery = exports.selectIsSearching = exports.selectSearchQuery = exports.selectSuggestions = exports.selectSearchValue = exports.selectState = undefined; + +var _search = __webpack_require__(19); + +var SEARCH_TYPES = _interopRequireWildcard(_search); + +var _lbryURI = __webpack_require__(2); + +var _navigation = __webpack_require__(15); + +var _reselect = __webpack_require__(16); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +var selectState = exports.selectState = function selectState(state) { + return state.search || {}; +}; + +var selectSearchValue = exports.selectSearchValue = (0, _reselect.createSelector)(selectState, function (state) { + return state.searchQuery; +}); + +var selectSuggestions = exports.selectSuggestions = (0, _reselect.createSelector)(selectState, function (state) { + return state.suggestions; +}); + +var selectSearchQuery = exports.selectSearchQuery = (0, _reselect.createSelector)(_navigation.selectCurrentPage, _navigation.selectCurrentParams, function (page, params) { + return page === 'search' ? params && params.query : null; +}); + +var selectIsSearching = exports.selectIsSearching = (0, _reselect.createSelector)(selectState, function (state) { + return state.searching; +}); + +var selectSearchUrisByQuery = exports.selectSearchUrisByQuery = (0, _reselect.createSelector)(selectState, function (state) { + return state.urisByQuery; +}); + +var makeSelectSearchUris = exports.makeSelectSearchUris = function makeSelectSearchUris(query) { + return ( + // replace statement below is kind of ugly, and repeated in doSearch action + (0, _reselect.createSelector)(selectSearchUrisByQuery, function (byQuery) { + return byQuery[query ? query.replace(/^lbry:\/\//i, '').replace(/\//, ' ') : query]; + }) + ); +}; + +var selectWunderBarAddress = exports.selectWunderBarAddress = (0, _reselect.createSelector)(_navigation.selectCurrentPage, selectSearchQuery, _navigation.selectCurrentParams, function (page, query, params) { + // only populate the wunderbar address if we are on the file/channel pages + // or show the search query + if (page === 'show') { + return params.uri; + } + return query; +}); + +var selectSearchBarFocused = exports.selectSearchBarFocused = (0, _reselect.createSelector)(selectState, function (state) { + return state.focused; +}); +// export const selectSear + +var selectSearchSuggestions = exports.selectSearchSuggestions = (0, _reselect.createSelector)(selectSearchValue, selectSuggestions, function (query, suggestions) { + if (!query) { + return []; + } + + var queryIsPrefix = query === 'lbry:' || query === 'lbry:/' || query === 'lbry://'; + + if (query.startsWith('lbry://') && query !== 'lbry://') { + // If it starts with a prefix, don't show any autocomplete results + // They are probably typing/pasting in a lbry uri + return [{ + value: query, + type: SEARCH_TYPES.FILE + }]; + } else if (queryIsPrefix) { + // If it is a prefix, wait until something else comes to figure out what to do + return []; + } + + var searchSuggestions = []; + try { + var uri = (0, _lbryURI.normalizeURI)(query); + + var _parseURI = (0, _lbryURI.parseURI)(uri), + claimName = _parseURI.claimName, + isChannel = _parseURI.isChannel; + + searchSuggestions.push({ + value: claimName, + type: SEARCH_TYPES.SEARCH + }, { + value: uri, + shorthand: isChannel ? claimName.slice(1) : claimName, + type: isChannel ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE + }); + } catch (e) { + searchSuggestions.push({ + value: query, + type: SEARCH_TYPES.SEARCH + }); + } + + var apiSuggestions = suggestions[query] || []; + if (apiSuggestions.length) { + searchSuggestions = searchSuggestions.concat(apiSuggestions.filter(function (suggestion) { + return suggestion !== query; + }).map(function (suggestion) { + // determine if it's a channel + try { + var _uri = (0, _lbryURI.normalizeURI)(suggestion); + + var _parseURI2 = (0, _lbryURI.parseURI)(_uri), + _claimName = _parseURI2.claimName, + _isChannel = _parseURI2.isChannel; + + return { + value: _uri, + shorthand: _isChannel ? _claimName.slice(1) : _claimName, + type: _isChannel ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE + }; + } catch (e) { + // search result includes some character that isn't valid in claim names + return { + value: suggestion, + type: SEARCH_TYPES.SEARCH + }; + } + })); + } + + return searchSuggestions; +}); + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var FILE = exports.FILE = 'file'; +var CHANNEL = exports.CHANNEL = 'channel'; +var SEARCH = exports.SEARCH = 'search'; + +/***/ }), +/* 20 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var isClaimNsfw = exports.isClaimNsfw = function isClaimNsfw(claim) { + return claim && claim.value && claim.value.stream && claim.value.stream.metadata.nsfw; +}; + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + Object.defineProperty(exports, "__esModule", { value: true }); @@ -4546,7 +4762,7 @@ function batchActions() { } /***/ }), -/* 19 */ +/* 22 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4606,7 +4822,7 @@ function doFetchCostInfoForUri(uri) { } /***/ }), -/* 20 */ +/* 23 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4631,7 +4847,7 @@ var _claims = __webpack_require__(5); var _claims2 = __webpack_require__(14); -var _file_info = __webpack_require__(21); +var _file_info = __webpack_require__(24); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -4699,7 +4915,7 @@ function doFetchFileInfosAndPublishedClaims() { } /***/ }), -/* 21 */ +/* 24 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4906,7 +5122,7 @@ var selectSearchDownloadUris = exports.selectSearchDownloadUris = function selec }; /***/ }), -/* 22 */ +/* 25 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -4921,19 +5137,15 @@ var _action_types = __webpack_require__(4); var ACTIONS = _interopRequireWildcard(_action_types); -var _search = __webpack_require__(23); - -var SEARCH_TYPES = _interopRequireWildcard(_search); - var _lbryURI = __webpack_require__(2); var _claims = __webpack_require__(5); -var _search2 = __webpack_require__(24); +var _search = __webpack_require__(18); -var _batchActions = __webpack_require__(18); +var _batchActions = __webpack_require__(21); -var _handleFetch = __webpack_require__(25); +var _handleFetch = __webpack_require__(26); var _handleFetch2 = _interopRequireDefault(_handleFetch); @@ -4941,16 +5153,18 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } -var DEFAULTSEARCHRESULTSIZE = 10; // @flow - +// @flow +var DEFAULTSEARCHRESULTSIZE = 10; var DEFAULTSEARCHRESULTFROM = 0; - +/*:: type Dispatch = (action: any) => any;*/ +/*:: type GetState = () => {};*/ var doSearch = exports.doSearch = function doSearch(rawQuery) { var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULTSEARCHRESULTSIZE; var from = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULTSEARCHRESULTFROM; - return function (dispatch, getState) { + var isBackgroundSearch = arguments[3]; + return function (dispatch /*: Dispatch*/, getState /*: GetState*/) { var state = getState(); - var query = rawQuery.replace(/^lbry:\/\//i, ''); + var query = rawQuery.replace(/^lbry:\/\//i, '').replace(/\//, ' '); if (!query) { dispatch({ @@ -4960,7 +5174,7 @@ var doSearch = exports.doSearch = function doSearch(rawQuery) { } // If we have already searched for something, we don't need to do anything - var urisForQuery = (0, _search2.makeSelectSearchUris)(query)(state); + var urisForQuery = (0, _search.makeSelectSearchUris)(query)(state); if (urisForQuery && !!urisForQuery.length) { return; } @@ -4972,13 +5186,17 @@ var doSearch = exports.doSearch = function doSearch(rawQuery) { // If the user is on the file page with a pre-populated uri and they select // the search option without typing anything, searchQuery will be empty // We need to populate it so the input is filled on the search page - if (!state.search.searchQuery) { + // isBackgroundSearch means the search is happening in the background, don't update the search query + if (!state.search.searchQuery && !isBackgroundSearch) { dispatch({ type: ACTIONS.UPDATE_SEARCH_QUERY, data: { searchQuery: query } }); } - fetch('https://lighthouse.lbry.io/search?s=' + query + '&size=' + size + '&from=' + from).then(_handleFetch2.default).then(function (data) { + + // For some reason the app doesn't automatically encode the pound sign (#) + // If we don't do it manually everything after the '#' gets removed + fetch('https://lighthouse.lbry.io/search?s=' + query.replace('#', '%23') + '&size=' + size + '&from=' + from).then(_handleFetch2.default).then(function (data) { var uris = []; var actions = []; @@ -5008,103 +5226,29 @@ var doSearch = exports.doSearch = function doSearch(rawQuery) { }; var getSearchSuggestions = exports.getSearchSuggestions = function getSearchSuggestions(value /*: string*/) { - return function (dispatch) { + return function (dispatch /*: Dispatch*/) { var query = value.trim(); - var isPrefix = function isPrefix() { - return query === '@' || query === 'lbry:' || query === 'lbry:/' || query === 'lbry://'; - }; - - if (!query || isPrefix()) { - dispatch({ - type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, - data: { suggestions: [] } - }); - return; - } - - var suggestions = []; - try { - // If the user is about to manually add the claim id ignore it until they - // actually add one. This would hardly ever happen, but then the search - // suggestions won't change just from adding a '#' after a uri - var uriQuery = query; - if (uriQuery.endsWith('#')) { - uriQuery = uriQuery.slice(0, -1); - } - - var uri = (0, _lbryURI.normalizeURI)(uriQuery); - - var _parseURI = (0, _lbryURI.parseURI)(uri), - claimName = _parseURI.claimName, - isChannel = _parseURI.isChannel; - - suggestions.push({ - value: uri, - shorthand: isChannel ? claimName.slice(1) : claimName, - type: isChannel ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE - }, { - value: claimName, - type: SEARCH_TYPES.SEARCH - }); - } catch (e) { - suggestions.push({ - value: query, - type: SEARCH_TYPES.SEARCH - }); - } - - // Populate the current search query suggestion before fetching results - dispatch({ - type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, - data: { suggestions: suggestions } - }); - // strip out any basic stuff for more accurate search results - var searchValue = value.replace(/lbry:\/\//g, '').replace(/-/g, ' '); + var searchValue = query.replace(/lbry:\/\//g, '').replace(/-/g, ' '); if (searchValue.includes('#')) { // This should probably be more robust, but I think it's fine for now // Remove everything after # to get rid of the claim id searchValue = searchValue.substring(0, searchValue.indexOf('#')); } + var suggestions = (0, _search.selectSuggestions)(getState()); + if (suggestions[searchValue]) { + return; + } + fetch('https://lighthouse.lbry.io/autocomplete?s=' + searchValue).then(_handleFetch2.default).then(function (apiSuggestions) { - // Suggestion could be a channel, uri, or search term - var formattedSuggestions = apiSuggestions.slice(0, 6).filter(function (suggestion) { - return suggestion !== query; - }).map(function (suggestion) { - if (suggestion.includes(' ')) { - return { - value: suggestion, - type: SEARCH_TYPES.SEARCH - }; - } - - try { - var _uri = (0, _lbryURI.normalizeURI)(suggestion); - - var _parseURI2 = (0, _lbryURI.parseURI)(_uri), - _claimName = _parseURI2.claimName, - _isChannel = _parseURI2.isChannel; - - return { - value: _uri, - shorthand: _isChannel ? _claimName.slice(1) : _claimName, - type: _isChannel ? SEARCH_TYPES.CHANNEL : SEARCH_TYPES.FILE - }; - } catch (e) { - // search result includes some character that isn't valid in claim names - return { - value: suggestion, - type: SEARCH_TYPES.SEARCH - }; - } - }); - - suggestions = suggestions.concat(formattedSuggestions); dispatch({ type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, - data: { suggestions: suggestions } + data: { + query: searchValue, + suggestions: apiSuggestions + } }); }).catch(function () { // If the fetch fails, do nothing @@ -5114,7 +5258,7 @@ var getSearchSuggestions = exports.getSearchSuggestions = function getSearchSugg }; var doUpdateSearchQuery = exports.doUpdateSearchQuery = function doUpdateSearchQuery(query /*: string*/, shouldSkipSuggestions /*: ?boolean*/) { - return function (dispatch) { + return function (dispatch /*: Dispatch*/) { dispatch({ type: ACTIONS.UPDATE_SEARCH_QUERY, data: { query: query } @@ -5128,7 +5272,7 @@ var doUpdateSearchQuery = exports.doUpdateSearchQuery = function doUpdateSearchQ }; var doFocusSearchInput = exports.doFocusSearchInput = function doFocusSearchInput() { - return function (dispatch) { + return function (dispatch /*: Dispatch*/) { return dispatch({ type: ACTIONS.SEARCH_FOCUS }); @@ -5136,7 +5280,7 @@ var doFocusSearchInput = exports.doFocusSearchInput = function doFocusSearchInpu }; var doBlurSearchInput = exports.doBlurSearchInput = function doBlurSearchInput() { - return function (dispatch) { + return function (dispatch /*: Dispatch*/) { return dispatch({ type: ACTIONS.SEARCH_BLUR }); @@ -5144,79 +5288,7 @@ var doBlurSearchInput = exports.doBlurSearchInput = function doBlurSearchInput() }; /***/ }), -/* 23 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -var FILE = exports.FILE = 'file'; -var CHANNEL = exports.CHANNEL = 'channel'; -var SEARCH = exports.SEARCH = 'search'; - -/***/ }), -/* 24 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.selectSearchBarFocused = exports.selectWunderBarAddress = exports.makeSelectSearchUris = exports.selectSearchUrisByQuery = exports.selectIsSearching = exports.selectSearchQuery = exports.selectSearchValue = exports.selectState = undefined; - -var _navigation = __webpack_require__(15); - -var _reselect = __webpack_require__(16); - -var selectState = exports.selectState = function selectState(state) { - return state.search || {}; -}; - -var selectSearchValue = exports.selectSearchValue = (0, _reselect.createSelector)(selectState, function (state) { - return state.searchQuery; -}); - -var selectSearchQuery = exports.selectSearchQuery = (0, _reselect.createSelector)(_navigation.selectCurrentPage, _navigation.selectCurrentParams, function (page, params) { - return page === 'search' ? params && params.query : null; -}); - -var selectIsSearching = exports.selectIsSearching = (0, _reselect.createSelector)(selectState, function (state) { - return state.searching; -}); - -var selectSearchUrisByQuery = exports.selectSearchUrisByQuery = (0, _reselect.createSelector)(selectState, function (state) { - return state.urisByQuery; -}); - -var makeSelectSearchUris = exports.makeSelectSearchUris = function makeSelectSearchUris(query) { - return ( - // replace statement below is kind of ugly, and repeated in doSearch action - (0, _reselect.createSelector)(selectSearchUrisByQuery, function (byQuery) { - return byQuery[query ? query.replace(/^lbry:\/\//i, '') : query]; - }) - ); -}; - -var selectWunderBarAddress = exports.selectWunderBarAddress = (0, _reselect.createSelector)(_navigation.selectCurrentPage, selectSearchQuery, _navigation.selectCurrentParams, function (page, query, params) { - // only populate the wunderbar address if we are on the file/channel pages - // or show the search query - if (page === 'show') { - return params.uri; - } - return query; -}); - -var selectSearchBarFocused = exports.selectSearchBarFocused = (0, _reselect.createSelector)(selectState, function (state) { - return state.focused; -}); - -/***/ }), -/* 25 */ +/* 26 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5231,7 +5303,7 @@ function handleFetchResponse(response) { } /***/ }), -/* 26 */ +/* 27 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5314,7 +5386,7 @@ function doBlackListedOutpointsSubscribe() { } /***/ }), -/* 27 */ +/* 28 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5333,6 +5405,11 @@ exports.doSendDraftTransaction = doSendDraftTransaction; exports.doSetDraftTransactionAmount = doSetDraftTransactionAmount; exports.doSetDraftTransactionAddress = doSetDraftTransactionAddress; exports.doSendSupport = doSendSupport; +exports.doWalletEncrypt = doWalletEncrypt; +exports.doWalletUnlock = doWalletUnlock; +exports.doWalletLock = doWalletLock; +exports.doWalletDecrypt = doWalletDecrypt; +exports.doWalletStatus = doWalletStatus; var _action_types = __webpack_require__(4); @@ -5344,7 +5421,7 @@ var _lbry2 = _interopRequireDefault(_lbry); var _notifications = __webpack_require__(3); -var _wallet = __webpack_require__(28); +var _wallet = __webpack_require__(29); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } @@ -5578,8 +5655,113 @@ function doSendSupport(amount, claimId, uri, successCallback, errorCallback) { }; } +function doWalletEncrypt(newPassword) { + return function (dispatch) { + dispatch({ + type: ACTIONS.WALLET_ENCRYPT_START + }); + + _lbry2.default.wallet_encrypt({ new_password: newPassword }).then(function (result) { + if (result === true) { + dispatch({ + type: ACTIONS.WALLET_ENCRYPT_COMPLETED, + result: result + }); + } else { + dispatch({ + type: ACTIONS.WALLET_ENCRYPT_FAILED, + result: result + }); + } + }); + }; +} + +function doWalletUnlock(password) { + return function (dispatch) { + dispatch({ + type: ACTIONS.WALLET_UNLOCK_START + }); + + _lbry2.default.wallet_unlock({ password: password }).then(function (result) { + if (result === true) { + dispatch({ + type: ACTIONS.WALLET_UNLOCK_COMPLETED, + result: result + }); + } else { + dispatch({ + type: ACTIONS.WALLET_UNLOCK_FAILED, + result: result + }); + } + }); + }; +} + +function doWalletLock() { + return function (dispatch) { + dispatch({ + type: ACTIONS.WALLET_LOCK_START + }); + + _lbry2.default.wallet_lock().then(function (result) { + if (result === true) { + dispatch({ + type: ACTIONS.WALLET_LOCK_COMPLETED, + result: result + }); + } else { + dispatch({ + type: ACTIONS.WALLET_LOCK_FAILED, + result: result + }); + } + }); + }; +} + +function doWalletDecrypt() { + return function (dispatch) { + dispatch({ + type: ACTIONS.WALLET_DECRYPT_START + }); + + _lbry2.default.wallet_decrypt().then(function (result) { + if (result === true) { + dispatch({ + type: ACTIONS.WALLET_DECRYPT_COMPLETED, + result: result + }); + } else { + dispatch({ + type: ACTIONS.WALLET_DECRYPT_FAILED, + result: result + }); + } + }); + }; +} + +function doWalletStatus() { + return function (dispatch) { + dispatch({ + type: ACTIONS.WALLET_STATUS_START + }); + + _lbry2.default.status().then(function (status) { + if (status && status.wallet) { + dispatch({ + type: ACTIONS.WALLET_STATUS_COMPLETED, + result: status.wallet.is_encrypted + }); + } + }); + }; +} + /***/ }), -/* 28 */ +/* 29 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5588,16 +5770,76 @@ function doSendSupport(amount, claimId, uri, successCallback, errorCallback) { Object.defineProperty(exports, "__esModule", { value: true }); -exports.makeSelectBlockDate = exports.selectBlocks = exports.selectDraftTransactionError = exports.selectDraftTransactionAddress = exports.selectDraftTransactionAmount = exports.selectDraftTransaction = exports.selectGettingNewAddress = exports.selectReceiveAddress = exports.selectIsSendingSupport = exports.selectIsFetchingTransactions = exports.selectHasTransactions = exports.selectRecentTransactions = exports.selectTransactionItems = exports.selectTransactionsById = exports.selectBalance = exports.selectState = undefined; +exports.makeSelectBlockDate = exports.selectBlocks = exports.selectDraftTransactionError = exports.selectDraftTransactionAddress = exports.selectDraftTransactionAmount = exports.selectDraftTransaction = exports.selectGettingNewAddress = exports.selectReceiveAddress = exports.selectIsSendingSupport = exports.selectIsFetchingTransactions = exports.selectHasTransactions = exports.selectRecentTransactions = exports.selectTransactionItems = exports.selectTransactionsById = exports.selectBalance = exports.selectWalletLockResult = exports.selectWalletLockSucceeded = exports.selectWalletLockPending = exports.selectWalletUnlockResult = exports.selectWalletUnlockSucceeded = exports.selectWalletUnlockPending = exports.selectWalletDecryptResult = exports.selectWalletDecryptSucceeded = exports.selectWalletDecryptPending = exports.selectWalletEncryptResult = exports.selectWalletEncryptSucceeded = exports.selectWalletEncryptPending = exports.selectWalletIsEncrypted = exports.selectWalletState = exports.selectState = undefined; var _reselect = __webpack_require__(16); +var _transaction_types = __webpack_require__(30); + +var TRANSACTIONS = _interopRequireWildcard(_transaction_types); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } var selectState = exports.selectState = function selectState(state) { return state.wallet || {}; }; +var selectWalletState = exports.selectWalletState = selectState; + +var selectWalletIsEncrypted = exports.selectWalletIsEncrypted = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletIsEncrypted; +}); + +var selectWalletEncryptPending = exports.selectWalletEncryptPending = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletEncryptPending; +}); + +var selectWalletEncryptSucceeded = exports.selectWalletEncryptSucceeded = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletEncryptSucceded; +}); + +var selectWalletEncryptResult = exports.selectWalletEncryptResult = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletEncryptResult; +}); + +var selectWalletDecryptPending = exports.selectWalletDecryptPending = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletDecryptPending; +}); + +var selectWalletDecryptSucceeded = exports.selectWalletDecryptSucceeded = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletDecryptSucceded; +}); + +var selectWalletDecryptResult = exports.selectWalletDecryptResult = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletDecryptResult; +}); + +var selectWalletUnlockPending = exports.selectWalletUnlockPending = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletUnlockPending; +}); + +var selectWalletUnlockSucceeded = exports.selectWalletUnlockSucceeded = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletUnlockSucceded; +}); + +var selectWalletUnlockResult = exports.selectWalletUnlockResult = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletUnlockResult; +}); + +var selectWalletLockPending = exports.selectWalletLockPending = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletLockPending; +}); + +var selectWalletLockSucceeded = exports.selectWalletLockSucceeded = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletLockSucceded; +}); + +var selectWalletLockResult = exports.selectWalletLockResult = (0, _reselect.createSelector)(selectState, function (state) { + return state.walletLockResult; +}); + var selectBalance = exports.selectBalance = (0, _reselect.createSelector)(selectState, function (state) { return state.balance; }); @@ -5614,7 +5856,7 @@ var selectTransactionItems = exports.selectTransactionItems = (0, _reselect.crea // ignore dust/fees // it is fee only txn if all infos are also empty - if (Math.abs(tx.value) === Math.abs(tx.fee) && tx.claim_info.length === 0 && tx.support_info.length === 0 && tx.update_info.length === 0) { + if (Math.abs(tx.value) === Math.abs(tx.fee) && tx.claim_info.length === 0 && tx.support_info.length === 0 && tx.update_info.length === 0 && tx.abandon_info.length === 0) { return; } @@ -5622,21 +5864,24 @@ var selectTransactionItems = exports.selectTransactionItems = (0, _reselect.crea append.push.apply(append, _toConsumableArray(tx.claim_info.map(function (item) { return Object.assign({}, tx, item, { - type: item.claim_name[0] === '@' ? 'channel' : 'publish' + type: item.claim_name[0] === '@' ? TRANSACTIONS.CHANNEL : TRANSACTIONS.PUBLISH }); }))); append.push.apply(append, _toConsumableArray(tx.support_info.map(function (item) { return Object.assign({}, tx, item, { - type: !item.is_tip ? 'support' : 'tip' + type: !item.is_tip ? TRANSACTIONS.SUPPORT : TRANSACTIONS.TIP }); }))); append.push.apply(append, _toConsumableArray(tx.update_info.map(function (item) { - return Object.assign({}, tx, item, { type: 'update' }); + return Object.assign({}, tx, item, { type: TRANSACTIONS.UPDATE }); + }))); + append.push.apply(append, _toConsumableArray(tx.abandon_info.map(function (item) { + return Object.assign({}, tx, item, { type: TRANSACTIONS.ABANDON }); }))); if (!append.length) { append.push(Object.assign({}, tx, { - type: tx.value < 0 ? 'spend' : 'receive' + type: tx.value < 0 ? TRANSACTIONS.SPEND : TRANSACTIONS.RECEIVE })); } @@ -5652,7 +5897,7 @@ var selectTransactionItems = exports.selectTransactionItems = (0, _reselect.crea fee: amount < 0 ? -1 * tx.fee / append.length : 0, claim_id: item.claim_id, claim_name: item.claim_name, - type: item.type || 'send', + type: item.type || TRANSACTIONS.SPEND, nout: item.nout }; }))); @@ -5715,7 +5960,27 @@ var makeSelectBlockDate = exports.makeSelectBlockDate = function makeSelectBlock }; /***/ }), -/* 29 */ +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +// eslint-disable-next-line import/prefer-default-export +var SPEND = exports.SPEND = 'spend'; +var RECEIVE = exports.RECEIVE = 'receive'; +var PUBLISH = exports.PUBLISH = 'publish'; +var CHANNEL = exports.CHANNEL = 'channel'; +var TIP = exports.TIP = 'tip'; +var SUPPORT = exports.SUPPORT = 'support'; +var UPDATE = exports.UPDATE = 'update'; +var ABANDON = exports.ABANDON = 'abandon'; + +/***/ }), +/* 31 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5753,7 +6018,7 @@ function formatFullPrice(amount) { } /***/ }), -/* 30 */ +/* 32 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -5776,7 +6041,6 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; var reducers = {}; var defaultState = { - rewardedContentClaimIds: [], channelClaimCounts: {} }; @@ -5923,12 +6187,14 @@ reducers[ACTIONS.FETCH_CHANNEL_CLAIMS_COMPLETED] = function (state, action) { var currentPageClaimIds = []; var byId = Object.assign({}, state.byId); var fetchingChannelClaims = Object.assign({}, state.fetchingChannelClaims); + var claimsByUri = Object.assign({}, state.claimsByUri); if (claims !== undefined) { claims.forEach(function (claim) { allClaimIds.add(claim.claim_id); currentPageClaimIds.push(claim.claim_id); byId[claim.claim_id] = claim; + claimsByUri['lbry://' + claim.name + '#' + claim.claim_id] = claim.claim_id; }); } @@ -5940,7 +6206,8 @@ reducers[ACTIONS.FETCH_CHANNEL_CLAIMS_COMPLETED] = function (state, action) { return Object.assign({}, state, { claimsByChannel: claimsByChannel, byId: byId, - fetchingChannelClaims: fetchingChannelClaims + fetchingChannelClaims: fetchingChannelClaims, + claimsByUri: claimsByUri }); }; @@ -6029,15 +6296,6 @@ reducers[ACTIONS.FETCH_TRENDING_CONTENT_COMPLETED] = function (state, action) { }); }; -reducers[ACTIONS.FETCH_REWARD_CONTENT_COMPLETED] = function (state, action) { - var claimIds = action.data.claimIds; - - - return Object.assign({}, state, { - rewardedContentClaimIds: claimIds - }); -}; - reducers[ACTIONS.RESOLVE_URIS_STARTED] = function (state, action) { var uris = action.data.uris; @@ -6080,7 +6338,7 @@ function claimsReducer() { } /***/ }), -/* 31 */ +/* 33 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6138,7 +6396,7 @@ function costInfoReducer() { } /***/ }), -/* 32 */ +/* 34 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6147,6 +6405,9 @@ function costInfoReducer() { Object.defineProperty(exports, "__esModule", { value: true }); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + exports.fileInfoReducer = fileInfoReducer; var _action_types = __webpack_require__(4); @@ -6293,11 +6554,14 @@ reducers[ACTIONS.LOADING_VIDEO_STARTED] = function (state, action) { var newLoading = Object.assign({}, state.urisLoading); - newLoading[uri] = true; + var newErrors = _extends({}, state.errors); + if (uri in newErrors) delete newErrors[uri]; + return Object.assign({}, state, { - urisLoading: newLoading + urisLoading: newLoading, + errors: _extends({}, newErrors) }); }; @@ -6306,11 +6570,14 @@ reducers[ACTIONS.LOADING_VIDEO_FAILED] = function (state, action) { var newLoading = Object.assign({}, state.urisLoading); - delete newLoading[uri]; + var newErrors = _extends({}, state.errors); + newErrors[uri] = true; + return Object.assign({}, state, { - urisLoading: newLoading + urisLoading: newLoading, + errors: _extends({}, newErrors) }); }; @@ -6335,7 +6602,7 @@ function fileInfoReducer() { } /***/ }), -/* 33 */ +/* 35 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6350,7 +6617,7 @@ var _action_types = __webpack_require__(4); var ACTIONS = _interopRequireWildcard(_action_types); -var _modal_types = __webpack_require__(34); +var _modal_types = __webpack_require__(36); var MODALS = _interopRequireWildcard(_modal_types); @@ -6421,7 +6688,7 @@ function notificationsReducer() { } /***/ }), -/* 34 */ +/* 36 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6455,9 +6722,12 @@ var PUBLISH = exports.PUBLISH = 'publish'; var SEARCH = exports.SEARCH = 'search'; var CONFIRM_TRANSACTION = exports.CONFIRM_TRANSACTION = 'confirm_transaction'; var CONFIRM_THUMBNAIL_UPLOAD = exports.CONFIRM_THUMBNAIL_UPLOAD = 'confirm_thumbnail_upload'; +var WALLET_ENCRYPT = exports.WALLET_ENCRYPT = 'wallet_encrypt'; +var WALLET_DECRYPT = exports.WALLET_DECRYPT = 'wallet_decrypt'; +var WALLET_UNLOCK = exports.WALLET_UNLOCK = 'wallet_unlock'; /***/ }), -/* 35 */ +/* 37 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6477,7 +6747,7 @@ var _action_types = __webpack_require__(4); var ACTIONS = _interopRequireWildcard(_action_types); -var _reduxUtils = __webpack_require__(36); +var _reduxUtils = __webpack_require__(38); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -6504,6 +6774,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope /*:: type UpdateSearchSuggestions = { type: ACTIONS.UPDATE_SEARCH_SUGGESTIONS, data: { + query: string, suggestions: Array, }, };*/ @@ -6527,7 +6798,7 @@ var defaultState = { isActive: false, // does the user have any typed text in the search input focused: false, // is the search input focused searchQuery: '', // needs to be an empty string for input focusing - suggestions: [], + suggestions: {}, urisByQuery: {} }; @@ -6556,15 +6827,15 @@ var searchReducer = exports.searchReducer = (0, _reduxUtils.handleActions)((_han }); }), _defineProperty(_handleActions, ACTIONS.UPDATE_SEARCH_SUGGESTIONS, function (state /*: SearchState*/, action /*: UpdateSearchSuggestions*/) /*: SearchState*/ { return _extends({}, state, { - suggestions: action.data.suggestions + suggestions: _extends({}, state.suggestions, _defineProperty({}, action.data.query, action.data.suggestions)) }); }), _defineProperty(_handleActions, ACTIONS.HISTORY_NAVIGATE, function (state /*: SearchState*/, action /*: HistoryNavigate*/) /*: SearchState*/ { var url = action.data.url; return _extends({}, state, { searchQuery: url.indexOf('/search') === 0 ? url.slice(14) : '', - suggestions: [], - isActive: url.indexOf('/search') === 0 + isActive: url.indexOf('/search') === 0, + suggestions: {} }); }), _defineProperty(_handleActions, ACTIONS.DISMISS_NOTIFICATION, function (state /*: SearchState*/) /*: SearchState*/ { return _extends({}, state, { @@ -6581,7 +6852,7 @@ var searchReducer = exports.searchReducer = (0, _reduxUtils.handleActions)((_han }), _handleActions), defaultState); /***/ }), -/* 36 */ +/* 38 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6614,7 +6885,7 @@ var handleActions = exports.handleActions = function handleActions(actionMap, de }; /***/ }), -/* 37 */ +/* 39 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6631,7 +6902,8 @@ var ACTIONS = _interopRequireWildcard(_action_types); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } -var reducers = {}; +var reducers = {}; // @flow + var buildDraftTransaction = function buildDraftTransaction() { return { amount: undefined, @@ -6639,6 +6911,36 @@ var buildDraftTransaction = function buildDraftTransaction() { }; }; +// TODO: Split into common success and failure types +// See details in https://github.com/lbryio/lbry/issues/1307 +/*:: type ActionResult = { + type: any, + result: any, +};*/ +/*:: type WalletState = { + balance: any, + blocks: any, + transactions: any, + fetchingTransactions: boolean, + gettingNewAddress: boolean, + draftTransaction: any, + sendingSupport: boolean, + walletIsEncrypted: boolean, + walletEncryptPending: boolean, + walletEncryptSucceded: ?boolean, + walletEncryptResult: ?boolean, + walletDecryptPending: boolean, + walletDecryptSucceded: ?boolean, + walletDecryptResult: ?boolean, + walletUnlockPending: boolean, + walletUnlockSucceded: ?boolean, + walletUnlockResult: ?boolean, + walletLockPending: boolean, + walletLockSucceded: ?boolean, + walletLockResult: ?boolean, +};*/ + + var defaultState = { balance: undefined, blocks: {}, @@ -6646,16 +6948,29 @@ var defaultState = { fetchingTransactions: false, gettingNewAddress: false, draftTransaction: buildDraftTransaction(), - sendingSupport: false + sendingSupport: false, + walletIsEncrypted: false, + walletEncryptPending: false, + walletEncryptSucceded: null, + walletEncryptResult: null, + walletDecryptPending: false, + walletDecryptSucceded: null, + walletDecryptResult: null, + walletUnlockPending: false, + walletUnlockSucceded: null, + walletUnlockResult: null, + walletLockPending: false, + walletLockSucceded: null, + walletLockResult: null }; -reducers[ACTIONS.FETCH_TRANSACTIONS_STARTED] = function (state) { +reducers[ACTIONS.FETCH_TRANSACTIONS_STARTED] = function (state /*: WalletState*/) { return Object.assign({}, state, { fetchingTransactions: true }); }; -reducers[ACTIONS.FETCH_TRANSACTIONS_COMPLETED] = function (state, action) { +reducers[ACTIONS.FETCH_TRANSACTIONS_COMPLETED] = function (state /*: WalletState*/, action) { var byId = Object.assign({}, state.transactions); var transactions = action.data.transactions; @@ -6671,13 +6986,13 @@ reducers[ACTIONS.FETCH_TRANSACTIONS_COMPLETED] = function (state, action) { }); }; -reducers[ACTIONS.GET_NEW_ADDRESS_STARTED] = function (state) { +reducers[ACTIONS.GET_NEW_ADDRESS_STARTED] = function (state /*: WalletState*/) { return Object.assign({}, state, { gettingNewAddress: true }); }; -reducers[ACTIONS.GET_NEW_ADDRESS_COMPLETED] = function (state, action) { +reducers[ACTIONS.GET_NEW_ADDRESS_COMPLETED] = function (state /*: WalletState*/, action) { var address = action.data.address; // Say no to localStorage! @@ -6688,25 +7003,25 @@ reducers[ACTIONS.GET_NEW_ADDRESS_COMPLETED] = function (state, action) { }); }; -reducers[ACTIONS.UPDATE_BALANCE] = function (state, action) { +reducers[ACTIONS.UPDATE_BALANCE] = function (state /*: WalletState*/, action) { return Object.assign({}, state, { balance: action.data.balance }); }; -reducers[ACTIONS.CHECK_ADDRESS_IS_MINE_STARTED] = function (state) { +reducers[ACTIONS.CHECK_ADDRESS_IS_MINE_STARTED] = function (state /*: WalletState*/) { return Object.assign({}, state, { checkingAddressOwnership: true }); }; -reducers[ACTIONS.CHECK_ADDRESS_IS_MINE_COMPLETED] = function (state) { +reducers[ACTIONS.CHECK_ADDRESS_IS_MINE_COMPLETED] = function (state /*: WalletState*/) { return Object.assign({}, state, { checkingAddressOwnership: false }); }; -reducers[ACTIONS.SET_DRAFT_TRANSACTION_AMOUNT] = function (state, action) { +reducers[ACTIONS.SET_DRAFT_TRANSACTION_AMOUNT] = function (state /*: WalletState*/, action) { var oldDraft = state.draftTransaction; var newDraft = Object.assign({}, oldDraft, { amount: parseFloat(action.data.amount) @@ -6717,7 +7032,7 @@ reducers[ACTIONS.SET_DRAFT_TRANSACTION_AMOUNT] = function (state, action) { }); }; -reducers[ACTIONS.SET_DRAFT_TRANSACTION_ADDRESS] = function (state, action) { +reducers[ACTIONS.SET_DRAFT_TRANSACTION_ADDRESS] = function (state /*: WalletState*/, action) { var oldDraft = state.draftTransaction; var newDraft = Object.assign({}, oldDraft, { address: action.data.address @@ -6728,7 +7043,7 @@ reducers[ACTIONS.SET_DRAFT_TRANSACTION_ADDRESS] = function (state, action) { }); }; -reducers[ACTIONS.SEND_TRANSACTION_STARTED] = function (state) { +reducers[ACTIONS.SEND_TRANSACTION_STARTED] = function (state /*: WalletState*/) { var newDraftTransaction = Object.assign({}, state.draftTransaction, { sending: true }); @@ -6738,13 +7053,13 @@ reducers[ACTIONS.SEND_TRANSACTION_STARTED] = function (state) { }); }; -reducers[ACTIONS.SEND_TRANSACTION_COMPLETED] = function (state) { +reducers[ACTIONS.SEND_TRANSACTION_COMPLETED] = function (state /*: WalletState*/) { return Object.assign({}, state, { draftTransaction: buildDraftTransaction() }); }; -reducers[ACTIONS.SEND_TRANSACTION_FAILED] = function (state, action) { +reducers[ACTIONS.SEND_TRANSACTION_FAILED] = function (state /*: WalletState*/, action) { var newDraftTransaction = Object.assign({}, state.draftTransaction, { sending: false, error: action.data.error @@ -6755,26 +7070,26 @@ reducers[ACTIONS.SEND_TRANSACTION_FAILED] = function (state, action) { }); }; -reducers[ACTIONS.SUPPORT_TRANSACTION_STARTED] = function (state) { +reducers[ACTIONS.SUPPORT_TRANSACTION_STARTED] = function (state /*: WalletState*/) { return Object.assign({}, state, { sendingSupport: true }); }; -reducers[ACTIONS.SUPPORT_TRANSACTION_COMPLETED] = function (state) { +reducers[ACTIONS.SUPPORT_TRANSACTION_COMPLETED] = function (state /*: WalletState*/) { return Object.assign({}, state, { sendingSupport: false }); }; -reducers[ACTIONS.SUPPORT_TRANSACTION_FAILED] = function (state, action) { +reducers[ACTIONS.SUPPORT_TRANSACTION_FAILED] = function (state /*: WalletState*/, action) { return Object.assign({}, state, { error: action.data.error, sendingSupport: false }); }; -reducers[ACTIONS.FETCH_BLOCK_SUCCESS] = function (state, action) { +reducers[ACTIONS.FETCH_BLOCK_SUCCESS] = function (state /*: WalletState*/, action) { var _action$data = action.data, block = _action$data.block, height = _action$data.block.height; @@ -6786,9 +7101,111 @@ reducers[ACTIONS.FETCH_BLOCK_SUCCESS] = function (state, action) { return Object.assign({}, state, { blocks: blocks }); }; +reducers[ACTIONS.WALLET_STATUS_COMPLETED] = function (state /*: WalletState*/, action) { + return Object.assign({}, state, { + walletIsEncrypted: action.result + }); +}; + +reducers[ACTIONS.WALLET_ENCRYPT_START] = function (state /*: WalletState*/) { + return Object.assign({}, state, { + walletEncryptPending: true, + walletEncryptSucceded: null, + walletEncryptResult: null + }); +}; + +reducers[ACTIONS.WALLET_ENCRYPT_COMPLETED] = function (state /*: WalletState*/, action /*: ActionResult*/) { + return Object.assign({}, state, { + walletEncryptPending: false, + walletEncryptSucceded: true, + walletEncryptResult: action.result + }); +}; + +reducers[ACTIONS.WALLET_ENCRYPT_FAILED] = function (state /*: WalletState*/, action /*: ActionResult*/) { + return Object.assign({}, state, { + walletEncryptPending: false, + walletEncryptSucceded: false, + walletEncryptResult: action.result + }); +}; + +reducers[ACTIONS.WALLET_DECRYPT_START] = function (state /*: WalletState*/) { + return Object.assign({}, state, { + walletDecryptPending: true, + walletDecryptSucceded: null, + walletDecryptResult: null + }); +}; + +reducers[ACTIONS.WALLET_DECRYPT_COMPLETED] = function (state /*: WalletState*/, action /*: ActionResult*/) { + return Object.assign({}, state, { + walletDecryptPending: false, + walletDecryptSucceded: true, + walletDecryptResult: action.result + }); +}; + +reducers[ACTIONS.WALLET_DECRYPT_FAILED] = function (state /*: WalletState*/, action /*: ActionResult*/) { + return Object.assign({}, state, { + walletDecryptPending: false, + walletDecryptSucceded: false, + walletDecryptResult: action.result + }); +}; + +reducers[ACTIONS.WALLET_UNLOCK_START] = function (state /*: WalletState*/) { + return Object.assign({}, state, { + walletUnlockPending: true, + walletUnlockSucceded: null, + walletUnlockResult: null + }); +}; + +reducers[ACTIONS.WALLET_UNLOCK_COMPLETED] = function (state /*: WalletState*/, action /*: ActionResult*/) { + return Object.assign({}, state, { + walletUnlockPending: false, + walletUnlockSucceded: true, + walletUnlockResult: action.result + }); +}; + +reducers[ACTIONS.WALLET_UNLOCK_FAILED] = function (state /*: WalletState*/, action /*: ActionResult*/) { + return Object.assign({}, state, { + walletUnlockPending: false, + walletUnlockSucceded: false, + walletUnlockResult: action.result + }); +}; + +reducers[ACTIONS.WALLET_LOCK_START] = function (state /*: WalletState*/) { + return Object.assign({}, state, { + walletLockPending: false, + walletLockSucceded: null, + walletLockResult: null + }); +}; + +reducers[ACTIONS.WALLET_LOCK_COMPLETED] = function (state /*: WalletState*/, action /*: ActionResult*/) { + return Object.assign({}, state, { + walletLockPending: false, + walletLockSucceded: true, + walletLockResult: action.result + }); +}; + +reducers[ACTIONS.WALLET_LOCK_FAILED] = function (state /*: WalletState*/, action /*: ActionResult*/) { + return Object.assign({}, state, { + walletLockPending: false, + walletLockSucceded: false, + walletLockResult: action.result + }); +}; + function walletReducer() { - var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; - var action = arguments[1]; + var state /*: WalletState*/ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultState; + var action /*: ActionResult*/ = arguments[1]; var handler = reducers[action.type]; if (handler) return handler(state, action); @@ -6796,7 +7213,7 @@ function walletReducer() { } /***/ }), -/* 38 */ +/* 40 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6815,7 +7232,7 @@ var _action_types = __webpack_require__(4); var ACTIONS = _interopRequireWildcard(_action_types); -var _reduxUtils = __webpack_require__(36); +var _reduxUtils = __webpack_require__(38); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } @@ -6855,7 +7272,7 @@ var blacklistReducer = exports.blacklistReducer = (0, _reduxUtils.handleActions) }), _handleActions), defaultState); /***/ }), -/* 39 */ +/* 41 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6877,7 +7294,7 @@ var selectBlackListedOutpoints = exports.selectBlackListedOutpoints = (0, _resel }); /***/ }), -/* 40 */ +/* 42 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6917,7 +7334,7 @@ selectNotification, function (notification) { }); /***/ }), -/* 41 */ +/* 43 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6961,7 +7378,7 @@ var makeSelectFetchingCostInfoForUri = exports.makeSelectFetchingCostInfoForUri }; /***/ }), -/* 42 */ +/* 44 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -6977,7 +7394,7 @@ var COMPLETE = exports.COMPLETE = 'complete'; var MANUAL = exports.MANUAL = 'manual'; /***/ }), -/* 43 */ +/* 45 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; @@ -7256,18 +7673,22 @@ function doRewardList() { }; } -function doClaimRewardType(rewardType, options) { +function doClaimRewardType(rewardType) { + var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + return function (dispatch, getState) { var state = getState(); + var userIsRewardApproved = (0, _user.selectUserIsRewardApproved)(state); var unclaimedRewards = (0, _rewards.selectUnclaimedRewards)(state); - var reward = unclaimedRewards.find(function (ur) { + var reward = rewardType === _rewards3.default.TYPE_REWARD_CODE ? { reward_type: _rewards3.default.TYPE_REWARD_CODE } : unclaimedRewards.find(function (ur) { return ur.reward_type === rewardType; }); - var userIsRewardApproved = (0, _user.selectUserIsRewardApproved)(state); - if (!reward || reward.transaction_id) { - // already claimed or doesn't exist, do nothing - return; + if (!_rewards3.default.TYPE_REWARD_CODE) { + if (!reward || reward.transaction_id) { + // already claimed or doesn't exist, do nothing + return; + } } if (!userIsRewardApproved && rewardType !== _rewards3.default.TYPE_CONFIRM_EMAIL) { @@ -7312,7 +7733,7 @@ function doClaimRewardType(rewardType, options) { }); }; - _rewards3.default.claimReward(rewardType).then(success, failure); + _rewards3.default.claimReward(rewardType, options.params).then(success, failure); }; } @@ -7743,6 +8164,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + var _lbryRedux = __webpack_require__(5); var _lbryio = __webpack_require__(3); @@ -7762,17 +8185,24 @@ rewards.TYPE_MANY_DOWNLOADS = 'many_downloads'; rewards.TYPE_FIRST_PUBLISH = 'first_publish'; rewards.TYPE_FEATURED_DOWNLOAD = 'featured_download'; rewards.TYPE_REFERRAL = 'referral'; +rewards.TYPE_REWARD_CODE = 'reward_code'; rewards.YOUTUBE_CREATOR = 'youtube_creator'; -rewards.claimReward = function (type) { +rewards.claimReward = function (type, rewardParams) { function requestReward(resolve, reject, params) { if (!_lbryio2.default.enabled) { reject(new Error(__('Rewards are not enabled.'))); return; } + _lbryio2.default.call('reward', 'new', params, 'post').then(function (reward) { var message = reward.reward_notification || 'You have claimed a ' + reward.reward_amount + ' LBC reward.'; + // We use a modal in the desktop app for this reward code. Dismiss it before showing the snackbar + if (type === rewards.TYPE_REWARD_CODE) { + window.store.dispatch((0, _lbryRedux.doHideNotification)()); + } + // Display global notice var action = (0, _lbryRedux.doNotify)({ message: message, @@ -7791,10 +8221,10 @@ rewards.claimReward = function (type) { return new Promise(function (resolve, reject) { _lbryRedux.Lbry.wallet_unused_address().then(function (address) { - var params = { + var params = _extends({ reward_type: type, wallet_address: address - }; + }, rewardParams); switch (type) { case rewards.TYPE_FIRST_CHANNEL: diff --git a/package.json b/package.json index 8eda237..ebed4b9 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "main": "dist/bundle.js", "scripts": { "build": "webpack", + "dev": "webpack --watch", "precommit": "lint-staged", "lint": "eslint 'src/**/*.js' --fix", "format": "prettier 'src/**/*.{js,json}' --write" diff --git a/src/redux/actions/rewards.js b/src/redux/actions/rewards.js index ba02077..c308ae5 100644 --- a/src/redux/actions/rewards.js +++ b/src/redux/actions/rewards.js @@ -26,16 +26,21 @@ export function doRewardList() { }; } -export function doClaimRewardType(rewardType, options) { +export function doClaimRewardType(rewardType, options = {}) { return (dispatch, getState) => { const state = getState(); - const unclaimedRewards = selectUnclaimedRewards(state); - const reward = unclaimedRewards.find(ur => ur.reward_type === rewardType); const userIsRewardApproved = selectUserIsRewardApproved(state); + const unclaimedRewards = selectUnclaimedRewards(state); + const reward = + rewardType === rewards.TYPE_REWARD_CODE + ? { reward_type: rewards.TYPE_REWARD_CODE } + : unclaimedRewards.find(ur => ur.reward_type === rewardType); - if (!reward || reward.transaction_id) { - // already claimed or doesn't exist, do nothing - return; + if (!rewards.TYPE_REWARD_CODE) { + if (!reward || reward.transaction_id) { + // already claimed or doesn't exist, do nothing + return; + } } if (!userIsRewardApproved && rewardType !== rewards.TYPE_CONFIRM_EMAIL) { @@ -80,7 +85,7 @@ export function doClaimRewardType(rewardType, options) { }); }; - rewards.claimReward(rewardType).then(success, failure); + rewards.claimReward(rewardType, options.params).then(success, failure); }; } diff --git a/src/rewards.js b/src/rewards.js index 53191b1..f37f1ce 100644 --- a/src/rewards.js +++ b/src/rewards.js @@ -1,4 +1,4 @@ -import { Lbry, doNotify } from 'lbry-redux'; +import { Lbry, doNotify, doHideNotification } from 'lbry-redux'; import Lbryio from 'lbryio'; const rewards = {}; @@ -12,18 +12,25 @@ rewards.TYPE_MANY_DOWNLOADS = 'many_downloads'; rewards.TYPE_FIRST_PUBLISH = 'first_publish'; rewards.TYPE_FEATURED_DOWNLOAD = 'featured_download'; rewards.TYPE_REFERRAL = 'referral'; +rewards.TYPE_REWARD_CODE = 'reward_code'; rewards.YOUTUBE_CREATOR = 'youtube_creator'; -rewards.claimReward = type => { +rewards.claimReward = (type, rewardParams) => { function requestReward(resolve, reject, params) { if (!Lbryio.enabled) { reject(new Error(__('Rewards are not enabled.'))); return; } + Lbryio.call('reward', 'new', params, 'post').then(reward => { const message = reward.reward_notification || `You have claimed a ${reward.reward_amount} LBC reward.`; + // We use a modal in the desktop app for this reward code. Dismiss it before showing the snackbar + if (type === rewards.TYPE_REWARD_CODE) { + window.store.dispatch(doHideNotification()); + } + // Display global notice const action = doNotify({ message, @@ -45,6 +52,7 @@ rewards.claimReward = type => { const params = { reward_type: type, wallet_address: address, + ...rewardParams, }; switch (type) {