android: a peer in full — their card, their interests, and what they have that you don't
The peer sheet's new "About this user" row opens a screen of its own: the card their client serves (their own words, their picture, the upload slot and the queue), the likes and hates they declared, and the comparison this phone makes of their share against the library. The comparison is the point of opening a stranger — every record they have by an artist in your library that you don't, each row opening the search that finds it, and a way to forget the whole comparison again. Nothing is uploaded to work it out. Their picture opens in the artwork viewer, which now takes a data: key beside a library path and an https URL.
This commit is contained in:
1 parent
694a29eb0d
commit
f792d7955d
8 files changed
+292
No files matched your search
@@ -143,6 +143,12 @@ const PROBE = `(function () {
|
||||
artEdge: (function () { var ps = document.querySelectorAll('.prefs[data-mode="albumart"] .pref'); var c = ps[1] && ps[1].querySelector('.chip.on'); return c ? c.textContent.trim() : ''; })(),
|
||||
brwFiles: document.querySelectorAll('.brw-dir .peer-file').length,
|
||||
brwHead: (document.querySelector('.brw-head .m') || {}).textContent || '',
|
||||
peerLine: (document.querySelector('.pr-head .m') || {}).textContent || '',
|
||||
peerDesc: (document.querySelector('.pr-about') || {}).textContent || '',
|
||||
peerPic: !!document.querySelector('.pr-pic img'),
|
||||
peerTags: document.querySelectorAll('.pr-tags .chip').length,
|
||||
peerGaps: document.querySelectorAll('.pr-gap').length,
|
||||
peerSum: (document.querySelector('.pr-sum') || {}).textContent || '',
|
||||
keep: (function () { var g = document.querySelector('.prefs[data-mode="streamcache"]'); var c = g && g.querySelector('.pref .chip.on'); return c ? c.textContent.trim() : ''; })(),
|
||||
impErr: [].some.call(document.querySelectorAll('.screen .stub'), function (x) { return /didn't import/.test(x.textContent); }),
|
||||
srcMax: (function () { var g = document.querySelector('.prefs[data-mode="stream"]'); var c = g && g.querySelector('.pref .chip.on'); return c ? c.textContent.trim() : ''; })(),
|
||||
@@ -261,6 +267,17 @@ const MOCK_STEPS = [
|
||||
{ do: `document.querySelector('.peer-file').dispatchEvent(new MouseEvent('contextmenu', { bubbles: true, cancelable: true }))`, name: "peer-file-sheet", wait: 700 },
|
||||
{ do: `document.querySelector('.scrim').click()`, wait: 500 },
|
||||
{ do: `document.querySelector('.peer-head .peer-menu').click()`, name: "peer-sheet", wait: 700 },
|
||||
/* the stranger in full: the card their client serves, their picture in
|
||||
the viewer, what they declared, and the comparison of their share
|
||||
against this library — a record they have and it doesn't, found */
|
||||
{ do: `__click('.halfsheet .row', 'About this user')`, name: "peer-screen", wait: 1400 },
|
||||
{ do: `document.querySelector('.pr-pic').click()`, name: "peer-picture", wait: 900 },
|
||||
{ do: `history.back()`, wait: 700 },
|
||||
{ do: `__click('.screen .btn', 'Compare with my library')`, name: "peer-compare", wait: 2200 },
|
||||
{ do: `__click('.pr-gap', 'Geogaddi')`, name: "peer-gap-open", wait: 1300 },
|
||||
{ do: `history.back()`, name: "peer-again", wait: 1200 },
|
||||
{ do: `__click('.screen .btn', 'Forget this comparison')`, name: "peer-forgotten", wait: 1100 },
|
||||
{ do: `document.querySelector('.pr-head .iconbtn').click()`, name: "peer-sheet-again", wait: 700 },
|
||||
{ do: `__click('.halfsheet .row', 'Browse their files')`, name: "browse", wait: 1400 },
|
||||
{ do: `__click('.brw-dir .peer-folder', 'Homework')`, name: "browse-dir", wait: 600 },
|
||||
{ do: `__click('.brw-dir .peer-file', 'Aerodynamic')`, name: "browse-play", wait: 2500 },
|
||||
@@ -481,6 +498,13 @@ const MOCK_EXPECT = {
|
||||
"net-filter-free": (i) => i.peers === 2,
|
||||
"peer-file-sheet": (i) => i.half.includes("up") && /Save this file/.test(i.halfText) && /Play from here/.test(i.halfText),
|
||||
"peer-sheet": (i) => i.half.includes("up") && /Browse their files/.test(i.halfText) && /Play this folder/.test(i.halfText),
|
||||
"peer-screen": (i) => i.title.startsWith("hifi_hank") && /Ripping my own vinyl/.test(i.peerDesc) && i.peerPic && i.peerTags === 6 && /slot is free/.test(i.peerLine) && /served/.test(i.peerLine) && i.peerGaps === 0,
|
||||
"peer-picture": (i) => i.viewer,
|
||||
"peer-compare": (i) => i.peerGaps === 6 && /in your library/.test(i.peerSum),
|
||||
"peer-gap-open": (i) => i.title.startsWith("Search") && i.sq === "Boards of Canada Geogaddi",
|
||||
"peer-again": (i) => i.title.startsWith("hifi_hank") && i.peerGaps === 6,
|
||||
"peer-forgotten": (i) => i.peerGaps === 0 && !i.peerSum && /forgotten/i.test(i.notice),
|
||||
"peer-sheet-again": (i) => i.half.includes("up") && /Browse their files/.test(i.halfText) && !/About this user/.test(i.halfText),
|
||||
browse: (i) => i.screen.includes("tr-push") && i.brwDirs >= 2 && /folders/.test(i.brwHead),
|
||||
"browse-dir": (i) => i.brwFiles >= 8,
|
||||
"browse-play": (i) => i.playing.includes("Aerodynamic") && /streaming from/.test(i.live),
|
||||
|
||||
Reference in new issue
Block a user