mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2025-07-21 03:52:48 +00:00
Only add PCs to the computer list when they have been polled once to get a UUID for equality comparison. Fix equality comparison in PcView to avoid duplicate PCs enumerated over mDNS.
This commit is contained in:
parent
55c800c2a5
commit
10204afdb4
@ -530,7 +530,7 @@ public class PcView extends Activity implements AdapterFragmentCallbacks {
|
|||||||
ComputerObject computer = (ComputerObject) pcGridAdapter.getItem(i);
|
ComputerObject computer = (ComputerObject) pcGridAdapter.getItem(i);
|
||||||
|
|
||||||
// Check if this is the same computer
|
// Check if this is the same computer
|
||||||
if (details.equals(computer.details)) {
|
if (details.uuid.equals(computer.details.uuid)) {
|
||||||
existingEntry = computer;
|
existingEntry = computer;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -64,10 +64,8 @@ public class ComputerManagerService extends Service {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Returns true if the details object was modified
|
// Returns true if the details object was modified
|
||||||
private boolean runPoll(ComputerDetails details)
|
private boolean runPoll(ComputerDetails details, boolean newPc)
|
||||||
{
|
{
|
||||||
boolean newPc = details.name.isEmpty();
|
|
||||||
|
|
||||||
if (!getLocalDatabaseReference()) {
|
if (!getLocalDatabaseReference()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -112,7 +110,7 @@ public class ComputerManagerService extends Service {
|
|||||||
public void run() {
|
public void run() {
|
||||||
while (!isInterrupted() && pollingActive) {
|
while (!isInterrupted() && pollingActive) {
|
||||||
// Check if this poll has modified the details
|
// Check if this poll has modified the details
|
||||||
runPoll(details);
|
runPoll(details, false);
|
||||||
|
|
||||||
// Wait until the next polling interval
|
// Wait until the next polling interval
|
||||||
try {
|
try {
|
||||||
@ -176,10 +174,6 @@ public class ComputerManagerService extends Service {
|
|||||||
return ComputerManagerService.this.addComputerBlocking(addr);
|
return ComputerManagerService.this.addComputerBlocking(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addComputer(InetAddress addr) {
|
|
||||||
ComputerManagerService.this.addComputer(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeComputer(String name) {
|
public void removeComputer(String name) {
|
||||||
ComputerManagerService.this.removeComputer(name);
|
ComputerManagerService.this.removeComputer(name);
|
||||||
}
|
}
|
||||||
@ -238,7 +232,7 @@ public class ComputerManagerService extends Service {
|
|||||||
@Override
|
@Override
|
||||||
public void notifyComputerAdded(MdnsComputer computer) {
|
public void notifyComputerAdded(MdnsComputer computer) {
|
||||||
// Kick off a serverinfo poll on this machine
|
// Kick off a serverinfo poll on this machine
|
||||||
addComputer(computer.getAddress());
|
addComputerBlocking(computer.getAddress());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -254,28 +248,11 @@ public class ComputerManagerService extends Service {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addComputer(InetAddress addr) {
|
|
||||||
// Setup a placeholder
|
|
||||||
ComputerDetails fakeDetails = new ComputerDetails();
|
|
||||||
fakeDetails.localIp = addr;
|
|
||||||
fakeDetails.remoteIp = addr;
|
|
||||||
fakeDetails.name = "";
|
|
||||||
|
|
||||||
addTuple(fakeDetails);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addTuple(ComputerDetails details) {
|
private void addTuple(ComputerDetails details) {
|
||||||
synchronized (pollingTuples) {
|
synchronized (pollingTuples) {
|
||||||
for (PollingTuple tuple : pollingTuples) {
|
for (PollingTuple tuple : pollingTuples) {
|
||||||
// Check if this is the same computer
|
// Check if this is the same computer
|
||||||
if (tuple.computer == details ||
|
if (tuple.computer.uuid.equals(details.uuid)) {
|
||||||
// If there's no name on one of these computers, compare with the local IP
|
|
||||||
((details.name.isEmpty() || tuple.computer.name.isEmpty()) &&
|
|
||||||
tuple.computer.localIp.equals(details.localIp)) ||
|
|
||||||
// If there is a name on both computers, compare with name
|
|
||||||
((!details.name.isEmpty() && !tuple.computer.name.isEmpty()) &&
|
|
||||||
tuple.computer.name.equals(details.name))) {
|
|
||||||
|
|
||||||
// Update details anyway in case this machine has been re-added by IP
|
// Update details anyway in case this machine has been re-added by IP
|
||||||
// after not being reachable by our existing information
|
// after not being reachable by our existing information
|
||||||
tuple.computer.localIp = details.localIp;
|
tuple.computer.localIp = details.localIp;
|
||||||
@ -306,13 +283,14 @@ public class ComputerManagerService extends Service {
|
|||||||
ComputerDetails fakeDetails = new ComputerDetails();
|
ComputerDetails fakeDetails = new ComputerDetails();
|
||||||
fakeDetails.localIp = addr;
|
fakeDetails.localIp = addr;
|
||||||
fakeDetails.remoteIp = addr;
|
fakeDetails.remoteIp = addr;
|
||||||
fakeDetails.name = "";
|
|
||||||
|
|
||||||
// Block while we try to fill the details
|
// Block while we try to fill the details
|
||||||
runPoll(fakeDetails);
|
runPoll(fakeDetails, true);
|
||||||
|
|
||||||
// If the machine is reachable, it was successful
|
// If the machine is reachable, it was successful
|
||||||
if (fakeDetails.state == ComputerDetails.State.ONLINE) {
|
if (fakeDetails.state == ComputerDetails.State.ONLINE) {
|
||||||
|
LimeLog.info("New PC ("+fakeDetails.name+") is UUID "+fakeDetails.uuid);
|
||||||
|
|
||||||
// Start a polling thread for this machine
|
// Start a polling thread for this machine
|
||||||
addTuple(fakeDetails);
|
addTuple(fakeDetails);
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user