msntv2 initial work
@@ -50,21 +50,19 @@ function validateAudioProxy() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (check.error || check.status !== 0) {
|
if (check.error || check.status !== 0) {
|
||||||
console.warn(`AudioProxy disabled: ffmpeg not found or failed to execute at '${wtvAudioProxy.config.ffmpegPath}'.`);
|
console.warn(` # AudioProxy disabled: ffmpeg not found or failed to execute at '${wtvAudioProxy.config.ffmpegPath}'.`);
|
||||||
if (check.error) console.warn(`AudioProxy ffmpeg error: ${check.error.message}`);
|
if (check.error) console.warn(` # AudioProxy ffmpeg error: ${check.error.message}`);
|
||||||
wtvAudioProxy.config.enabled = false;
|
wtvAudioProxy.config.enabled = false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`AudioProxy enabled: transcoding audio to ${wtvAudioProxy.config.bitrate} ${wtvAudioProxy.config.sampleRate}Hz mono MP3.`);
|
console.log(` * AudioProxy enabled: transcoding audio to ${wtvAudioProxy.config.bitrate} ${wtvAudioProxy.config.sampleRate}Hz mono MP3.`);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.warn(`AudioProxy disabled: ffmpeg validation failed: ${error.message}`);
|
console.warn(` # AudioProxy disabled: ffmpeg validation failed: ${error.message}`);
|
||||||
wtvAudioProxy.config.enabled = false;
|
wtvAudioProxy.config.enabled = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
validateAudioProxy();
|
|
||||||
|
|
||||||
process
|
process
|
||||||
.on('SIGTERM', shutdown('SIGTERM'))
|
.on('SIGTERM', shutdown('SIGTERM'))
|
||||||
.on('SIGINT', shutdown('SIGINT'))
|
.on('SIGINT', shutdown('SIGINT'))
|
||||||
@@ -2487,6 +2485,8 @@ else console.log(" * Shenanigans disabled");
|
|||||||
if (minisrv_config.config.image_decoder.enabled) console.log(" * WebTV Unsupported images will be processed and converted for WebTV clients");
|
if (minisrv_config.config.image_decoder.enabled) console.log(" * WebTV Unsupported images will be processed and converted for WebTV clients");
|
||||||
else console.log(" * WebTV Unsupported images will not be processed, and sent to client as-is");
|
else console.log(" * WebTV Unsupported images will not be processed, and sent to client as-is");
|
||||||
|
|
||||||
|
validateAudioProxy();
|
||||||
|
|
||||||
ports.sort();
|
ports.sort();
|
||||||
pc_ports.sort();
|
pc_ports.sort();
|
||||||
|
|
||||||
|
|||||||
172
zefie_wtvp_minisrv/generate_msn_san_cert.js
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const forge = require('node-forge');
|
||||||
|
|
||||||
|
const workspaceRoot = __dirname;
|
||||||
|
const httpsDir = path.join(workspaceRoot, 'includes', 'ServiceDeps', 'https');
|
||||||
|
const msnDir = path.join(workspaceRoot, 'includes', 'ServiceDeps', 'msntv2');
|
||||||
|
const domainsFile = path.join(msnDir, 'msn_domains.txt');
|
||||||
|
|
||||||
|
const defaultCaCertPath = path.join(msnDir, 'msntv2.crt');
|
||||||
|
const defaultCaKeyPath = path.join(msnDir, 'msntv2.key');
|
||||||
|
const defaultOutCertPath = path.join(msnDir, 'msn_domains.crt');
|
||||||
|
const defaultOutKeyPath = path.join(msnDir, 'msn_domains.key');
|
||||||
|
|
||||||
|
function parseArgs(argv) {
|
||||||
|
const out = {};
|
||||||
|
for (let i = 2; i < argv.length; i++) {
|
||||||
|
const part = argv[i];
|
||||||
|
if (!part.startsWith('--')) continue;
|
||||||
|
const key = part.slice(2);
|
||||||
|
const next = argv[i + 1];
|
||||||
|
if (!next || next.startsWith('--')) {
|
||||||
|
out[key] = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
out[key] = next;
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
function extractDomainsFromRedirectMap(text) {
|
||||||
|
const found = [];
|
||||||
|
const seen = new Set();
|
||||||
|
const re = /"([A-Za-z0-9.-]+\.)"\s*:\s*self\.redirect_ip/g;
|
||||||
|
let match;
|
||||||
|
while ((match = re.exec(text))) {
|
||||||
|
const clean = match[1].replace(/\.$/, '').toLowerCase();
|
||||||
|
if (!seen.has(clean)) {
|
||||||
|
seen.add(clean);
|
||||||
|
found.push(clean);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadDomains(args) {
|
||||||
|
if (args['from-map-file']) {
|
||||||
|
const mapText = fs.readFileSync(path.resolve(workspaceRoot, args['from-map-file']), 'utf8');
|
||||||
|
const domains = extractDomainsFromRedirectMap(mapText);
|
||||||
|
if (!domains.length) {
|
||||||
|
throw new Error('No domains were extracted from --from-map-file.');
|
||||||
|
}
|
||||||
|
return domains;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fs.existsSync(domainsFile)) {
|
||||||
|
throw new Error('Domain file not found: ' + domainsFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
const domains = fs.readFileSync(domainsFile, 'utf8')
|
||||||
|
.split(/\r?\n/)
|
||||||
|
.map((s) => s.trim().toLowerCase())
|
||||||
|
.filter((s) => s && !s.startsWith('#'));
|
||||||
|
|
||||||
|
return Array.from(new Set(domains));
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadPemOrThrow(filePath, label) {
|
||||||
|
if (!fs.existsSync(filePath)) {
|
||||||
|
throw new Error(label + ' file missing: ' + filePath);
|
||||||
|
}
|
||||||
|
return fs.readFileSync(filePath, 'utf8');
|
||||||
|
}
|
||||||
|
|
||||||
|
function ensureDirFor(filePath) {
|
||||||
|
const dir = path.dirname(filePath);
|
||||||
|
if (!fs.existsSync(dir)) {
|
||||||
|
fs.mkdirSync(dir, { recursive: true });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function signAlgorithm(sigName) {
|
||||||
|
const lower = String(sigName || 'sha1').toLowerCase();
|
||||||
|
if (lower === 'sha256') return forge.md.sha256.create();
|
||||||
|
if (lower === 'sha384') return forge.md.sha384.create();
|
||||||
|
if (lower === 'sha512') return forge.md.sha512.create();
|
||||||
|
return forge.md.sha1.create();
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateCert({ domains, caCertPem, caKeyPem, outCertPath, outKeyPath, years, sig }) {
|
||||||
|
const caCert = forge.pki.certificateFromPem(caCertPem);
|
||||||
|
const caKey = forge.pki.privateKeyFromPem(caKeyPem);
|
||||||
|
|
||||||
|
const keys = forge.pki.rsa.generateKeyPair(2048);
|
||||||
|
const cert = forge.pki.createCertificate();
|
||||||
|
cert.publicKey = keys.publicKey;
|
||||||
|
cert.serialNumber = forge.util.bytesToHex(forge.random.getBytesSync(16));
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
cert.validity.notBefore = new Date(now.getTime() - 24 * 60 * 60 * 1000);
|
||||||
|
cert.validity.notAfter = new Date(now.getTime() + years * 365 * 24 * 60 * 60 * 1000);
|
||||||
|
|
||||||
|
const cn = domains[0] || 'headwaiter.trusted.msntv.msn.com';
|
||||||
|
cert.setSubject([
|
||||||
|
{ name: 'commonName', value: cn },
|
||||||
|
{ name: 'organizationName', value: 'Zefie Networks' },
|
||||||
|
{ name: 'countryName', value: 'US' }
|
||||||
|
]);
|
||||||
|
cert.setIssuer(caCert.subject.attributes);
|
||||||
|
|
||||||
|
cert.setExtensions([
|
||||||
|
{ name: 'basicConstraints', cA: false },
|
||||||
|
{ name: 'keyUsage', digitalSignature: true, keyEncipherment: true },
|
||||||
|
{ name: 'extKeyUsage', serverAuth: true },
|
||||||
|
{
|
||||||
|
name: 'subjectAltName',
|
||||||
|
altNames: domains.map((d) => ({ type: 2, value: d }))
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
cert.sign(caKey, signAlgorithm(sig));
|
||||||
|
|
||||||
|
ensureDirFor(outCertPath);
|
||||||
|
ensureDirFor(outKeyPath);
|
||||||
|
fs.writeFileSync(outKeyPath, forge.pki.privateKeyToPem(keys.privateKey), 'utf8');
|
||||||
|
fs.writeFileSync(outCertPath, forge.pki.certificateToPem(cert), 'utf8');
|
||||||
|
|
||||||
|
return { cn, count: domains.length };
|
||||||
|
}
|
||||||
|
|
||||||
|
function main() {
|
||||||
|
const args = parseArgs(process.argv);
|
||||||
|
|
||||||
|
const caCertPath = path.resolve(workspaceRoot, args['ca-cert'] || defaultCaCertPath);
|
||||||
|
const caKeyPath = path.resolve(workspaceRoot, args['ca-key'] || defaultCaKeyPath);
|
||||||
|
const outCertPath = path.resolve(workspaceRoot, args['out-cert'] || defaultOutCertPath);
|
||||||
|
const outKeyPath = path.resolve(workspaceRoot, args['out-key'] || defaultOutKeyPath);
|
||||||
|
const years = Number(args.years || 15);
|
||||||
|
const sig = String(args.sig || 'sha1');
|
||||||
|
|
||||||
|
const domains = loadDomains(args);
|
||||||
|
const caCertPem = loadPemOrThrow(caCertPath, 'CA cert');
|
||||||
|
const caKeyPem = loadPemOrThrow(caKeyPath, 'CA key');
|
||||||
|
|
||||||
|
const result = generateCert({
|
||||||
|
domains,
|
||||||
|
caCertPem,
|
||||||
|
caKeyPem,
|
||||||
|
outCertPath,
|
||||||
|
outKeyPath,
|
||||||
|
years,
|
||||||
|
sig
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('[msn-san-cert] generated cert:', outCertPath);
|
||||||
|
console.log('[msn-san-cert] generated key :', outKeyPath);
|
||||||
|
console.log('[msn-san-cert] domains :', result.count);
|
||||||
|
console.log('[msn-san-cert] common name :', result.cn);
|
||||||
|
console.log('[msn-san-cert] signature alg :', sig);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (require.main === module) {
|
||||||
|
try {
|
||||||
|
main();
|
||||||
|
} catch (err) {
|
||||||
|
console.error('[msn-san-cert] error:', err.message);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIGSTCCBTGgAwIBAgIQlHjGEAhkTTLRsnsDQ/FBODANBgkqhkiG9w0BAQUFADBw
|
||||||
|
MQswCQYDVQQGEwJVUzELMAkGA1UECAwCT0gxEzARBgNVBAcMCkJ1dHQgQ3JhY2sx
|
||||||
|
IDAeBgNVBAoMF1VuZGVyd2VhciBJbnNwZWN0b3IgIzEyMR0wGwYDVQQLDBRUaGlu
|
||||||
|
ZyBMb29rZXIgRXhwZXJ0czAeFw0yNjA0MzAxMjI0MzFaFw00MTA0MjcxMjI0MzFa
|
||||||
|
MD4xFjAUBgNVBAMTDWVwaXgueGJveC5jb20xFzAVBgNVBAoTDlplZmllIE5ldHdv
|
||||||
|
cmtzMQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
||||||
|
ALcVrQ2E2OiR8JJ2WFZVvrN1hrM2vusykN/59GZ5DuIQEQlDC3UZw0Utu/gnTwqh
|
||||||
|
GScJ2xkCrW2znTl/Dnst2sppy+PghIJBORM/M5CViKuSezpekribgUBFUbF9udSF
|
||||||
|
WqfdEnxwd51v/hVS753hL2pT+BbzMgalAmxGFLREf1Hu4loQu9bo8I8hhwFRCTd1
|
||||||
|
JMqQ8QMxG5l+tV6u52SwDWAkMdSL9Tqh0mun38hhZWUCkGCCSpjUmL2PzWfdH7K1
|
||||||
|
GXw+VtA48gidkjahChlNuuMu7w2fJdbfZtSITYimd5yQ19sStlr5lZ/tNyHOvokL
|
||||||
|
xBZ4HUSk9xePKyVe2s1nEU0CAwEAAaOCAw8wggMLMAkGA1UdEwQCMAAwCwYDVR0P
|
||||||
|
BAQDAgWgMBMGA1UdJQQMMAoGCCsGAQUFBwMBMIIC2gYDVR0RBIIC0TCCAs2CDWVw
|
||||||
|
aXgueGJveC5jb22CEXhlYXMueGJveGxpdmUuY29tgg14ZWFzLnhib3guY29tghJ4
|
||||||
|
ZXRncy54Ym94bGl2ZS5jb22CD2FzLnhib3hsaXZlLmNvbYIUYXMucGFydC54Ym94
|
||||||
|
bGl2ZS5jb22CEHRncy54Ym94bGl2ZS5jb22CFXRncy5wYXJ0Lnhib3hsaXZlLmNv
|
||||||
|
bYITeGVtYWNzLnhib3hsaXZlLmNvbYIRbWFuaWZlc3QueGJveC5jb22CEW1hY3Mu
|
||||||
|
eGJveGxpdmUuY29tghZtYWNzLnBhcnQueGJveGxpdmUuY29tghdwaWZsYy5wYXJ0
|
||||||
|
Lnhib3hsaXZlLmNvbYIQZXBsaXN0cy54Ym94LmNvbYIScGlmbGMueGJveGxpdmUu
|
||||||
|
Y29tghBiZWFjb25zLnhib3guY29tghlzZzQudHJ1c3RlZC5tc250di5tc24uY29t
|
||||||
|
ghlzZzMudHJ1c3RlZC5tc250di5tc24uY29tghlzZzIudHJ1c3RlZC5tc250di5t
|
||||||
|
c24uY29tghlzZzEudHJ1c3RlZC5tc250di5tc24uY29tgg1tc250di5tc24uY29t
|
||||||
|
ghZtYWlsLnNlcnZpY2VzLmxpdmUuY29tgiBoZWFkd2FpdGVyLnRydXN0ZWQubXNu
|
||||||
|
dHYubXNuLmNvbYIec3luYy1zZzEudHJ1c3RlZC5tc250di5tc24uY29tgg5sb2dp
|
||||||
|
bi5saXZlLmNvbYIRcG9wdGltaXplLm1zbi5jb22CEWZhdm9yaXRlcy5tc24uY29t
|
||||||
|
ghFtZXNzZW5nZXIubXNuLmNvbYIRbGl2ZWZpbGVzdG9yZS5jb22CFnVzZXJzLnN0
|
||||||
|
b3JhZ2UubGl2ZS5jb22CCWcubXNuLmNvbYIXbXNuaWFsb2dpbi5wYXNzcG9ydC5j
|
||||||
|
b22CEGNsb3VkLnJlZml2ZS5kZXaCE3Byb2Qucm9zLnJlZml2ZS5kZXYwDQYJKoZI
|
||||||
|
hvcNAQEFBQADggEBACKaL3Pl9893HrDj6mAM5Ac3qoD0wCfxws8H7oiabzHr4PgA
|
||||||
|
rZKoV8NS5qwoi1B1Tr/EZJct0gtjBdp+x8GRZ3j+UgkPhTEi32kXG8HLDRaaXIhW
|
||||||
|
i7LpjMs3zk6uATXNuPfjuFs6yh66H8Qj44MXgYT66xLLVKYsrm2CSjDiajfhpr5x
|
||||||
|
HL2oEJUJfqoGTxaxz8zAdiDCVjTkJ0zxyv6vGsVo0TgVggOEfJiYMSqBlJ/j7wBj
|
||||||
|
+mfRsB8d735QhJOMdABMDLj0DIG6HoMM2gvR2ayeuTtSf1x36doyadDmNYDXyIqI
|
||||||
|
Vica5k3jkRJ/4IIBf8Ghakh1e+4r6hI692sxePA=
|
||||||
|
-----END CERTIFICATE-----
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
-----BEGIN RSA PRIVATE KEY-----
|
||||||
|
MIIEogIBAAKCAQEAtxWtDYTY6JHwknZYVlW+s3WGsza+6zKQ3/n0ZnkO4hARCUML
|
||||||
|
dRnDRS27+CdPCqEZJwnbGQKtbbOdOX8Oey3aymnL4+CEgkE5Ez8zkJWIq5J7Ol6S
|
||||||
|
uJuBQEVRsX251IVap90SfHB3nW/+FVLvneEvalP4FvMyBqUCbEYUtER/Ue7iWhC7
|
||||||
|
1ujwjyGHAVEJN3UkypDxAzEbmX61Xq7nZLANYCQx1Iv1OqHSa6ffyGFlZQKQYIJK
|
||||||
|
mNSYvY/NZ90fsrUZfD5W0DjyCJ2SNqEKGU264y7vDZ8l1t9m1IhNiKZ3nJDX2xK2
|
||||||
|
WvmVn+03Ic6+iQvEFngdRKT3F48rJV7azWcRTQIDAQABAoIBAAueAf2WHOdg/0lj
|
||||||
|
3gYYacHcZsAvbJzi+ANmSmZILzQT/ei/CtaS3Gui08cSw3ayszRhcTgcjeGkoIjZ
|
||||||
|
8ZLKXZQzc18Ry4ayWctJWt3FR0dPw6b4AkpZf7GS1HS1PBnqnk6Bfh9MSaLBTPeQ
|
||||||
|
bCjx9X7DNj5KjzWRud4h8kVgBU4vBTAU1Pu+j5yiepMnmasT/O4JQ6OZ0roc3Mr4
|
||||||
|
1MiEfNk33Qi88xsIeKcfqVS43vJzowUj6yF+zADTMSWr/Ij5xhHCdqSR0CFyX42Q
|
||||||
|
GrNFfcWQ9veFcL9b9+tTp575F8HNFa50ULCrk9wjMPsGk1aMztfF5EZamGyDvf/0
|
||||||
|
m2OGmjcCgYEA7eS8J76LDI8YS6Ijccu4FJRz9a+fPDOxkVmzbQKb2ErEpTWXdQX8
|
||||||
|
s2sk3W4EnMfMEZ9IJ0rm+LhaZZbKmiCL6lCJSIAhsQBdpHMJ/EUX1gDmv3I3/Ie7
|
||||||
|
pa9cMnxNQG2plWvKXorjP87ho1X2WmXtmaJc/oWR5x07Rtm/McZpCi8CgYEAxQUD
|
||||||
|
AbMBIKf3zB+bHmmTBFQkkt3GnCWGyF2nH85REX0e5SOOyAxJicXq3WSZkHtRjYMl
|
||||||
|
nxuy/ReyEU0zgWr9Qgl6PZ7EoJbS74W+IPth0KB9ZzJ6gXIP4k7n5lBMXbIpEaU9
|
||||||
|
n2DE43w2I6Zxl98F0z91Bsi/WoViDMJl/M2eSUMCgYAKDR0KDNnxKOac43fd6f6Y
|
||||||
|
GAGiQs5Wi9SX0JNtKqwNAnO2i0If9qXLqt4+4NQfD64GnJU+28JQhfGD01AyHOfs
|
||||||
|
eYSjZI6H3P0X4qhsWTr9lsIpGplU+SMrh/I8S9Yzv65nmstNHU8mtgYAkbQ784yL
|
||||||
|
bjnBo0Eb47dKcg7K+pgbjwKBgHMDM/gf+T6JD30XzkP4uZxDSn55/OFWftIk6dUF
|
||||||
|
agndktWM5mMd2SgWY78OZR8U/kywDJxPXTOmS4sSGEkqneGZCsVCE+LzaPvuhUlX
|
||||||
|
tohFyC8gJqe+YEtqaLHomkvwH01vuwN5SDbMYgZ5ucJArXPejYCCXEKJru1n5oWn
|
||||||
|
uwllAoGAD2W5Ims1iR/qWEzQoiSBOvDJdsQWLJwGWlZ1/bUZ5FK3VlhhNMuJv5PC
|
||||||
|
wJhSSW3GECt0SxS+z4QtjFATPMO5hdoo9H6WN+Kx14vAjJbX+8jLBS3EhVZkv6b3
|
||||||
|
aAjJgd9LMbAh9H+CAiYf9QjKfSL7ueIjzf4CHfovj8bk5PPlVSA=
|
||||||
|
-----END RSA PRIVATE KEY-----
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
epix.xbox.com
|
||||||
|
xeas.xboxlive.com
|
||||||
|
xeas.xbox.com
|
||||||
|
xetgs.xboxlive.com
|
||||||
|
as.xboxlive.com
|
||||||
|
as.part.xboxlive.com
|
||||||
|
tgs.xboxlive.com
|
||||||
|
tgs.part.xboxlive.com
|
||||||
|
xemacs.xboxlive.com
|
||||||
|
manifest.xbox.com
|
||||||
|
macs.xboxlive.com
|
||||||
|
macs.part.xboxlive.com
|
||||||
|
piflc.part.xboxlive.com
|
||||||
|
eplists.xbox.com
|
||||||
|
piflc.xboxlive.com
|
||||||
|
beacons.xbox.com
|
||||||
|
sg4.trusted.msntv.msn.com
|
||||||
|
sg3.trusted.msntv.msn.com
|
||||||
|
sg2.trusted.msntv.msn.com
|
||||||
|
sg1.trusted.msntv.msn.com
|
||||||
|
msntv.msn.com
|
||||||
|
mail.services.live.com
|
||||||
|
headwaiter.trusted.msntv.msn.com
|
||||||
|
sync-sg1.trusted.msntv.msn.com
|
||||||
|
login.live.com
|
||||||
|
poptimize.msn.com
|
||||||
|
favorites.msn.com
|
||||||
|
messenger.msn.com
|
||||||
|
livefilestore.com
|
||||||
|
users.storage.live.com
|
||||||
|
g.msn.com
|
||||||
|
msnialogin.passport.com
|
||||||
|
cloud.refive.dev
|
||||||
|
prod.ros.refive.dev
|
||||||
23
zefie_wtvp_minisrv/includes/ServiceDeps/msntv2/msntv2.crt
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIDwzCCAqugAwIBAgIULL+4ofEIwgHwoGgoEJ+mJOmeF4YwDQYJKoZIhvcNAQEF
|
||||||
|
BQAwcDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAk9IMRMwEQYDVQQHDApCdXR0IENy
|
||||||
|
YWNrMSAwHgYDVQQKDBdVbmRlcndlYXIgSW5zcGVjdG9yICMxMjEdMBsGA1UECwwU
|
||||||
|
VGhpbmcgTG9va2VyIEV4cGVydHMwIBcNMDAwNDIwMDAwMDAxWhgPMjA2OTA2MDkw
|
||||||
|
MDAwMDFaMHAxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJPSDETMBEGA1UEBwwKQnV0
|
||||||
|
dCBDcmFjazEgMB4GA1UECgwXVW5kZXJ3ZWFyIEluc3BlY3RvciAjMTIxHTAbBgNV
|
||||||
|
BAsMFFRoaW5nIExvb2tlciBFeHBlcnRzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
||||||
|
MIIBCgKCAQEArN5xb8PqUKNNTitGuxyJJxEsWTIt7t7eobSq1+V3hTpknJEspRpb
|
||||||
|
JeD5Ep86pWn4aGoWYT0JU9w4FRJFPaBPAMmLFTIYv1bySlFwna+5J67dAtMm59Pr
|
||||||
|
t3ZSw2dQpads3LGZRSpkY1mv9GC2TVVk/TANWZmWYvEZZ4/2E2YuMJZ6v6gNIY7Y
|
||||||
|
pfJ6F6Q4+d/Dgrvow4E35lmNuM0Y95sdMhKy8HTJ0ecU/bMLKyoXXZyt7LxezT+T
|
||||||
|
w3J2EDVV03lDXZhb0h2ZECmpCAgnKsQ/WmLMjEGeojDQnm+QzTaFHqO0148RMbYN
|
||||||
|
lxURCZVl+keYe1LTHW/K+2f58DeeI0z11wIDAQABo1MwUTAdBgNVHQ4EFgQU0bsp
|
||||||
|
ZOhtJGP0dLS4sdaA4nmQ5ocwHwYDVR0jBBgwFoAU0bspZOhtJGP0dLS4sdaA4nmQ
|
||||||
|
5ocwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEANAV1WNeCggjK
|
||||||
|
eb8kIGkt2R3PMMBy2w+rC4X80xygh+NHU5neJKM1lpq6NLkt5rCBXNCTDb5uPjRv
|
||||||
|
mcrGeIYJYXMy39htjlYgPtfUiQx7e7eq3g1mMHYN26Gr9p7BwJW0QVvaA6zB3lqt
|
||||||
|
HGL7hwQyBCD9P/0sR91sjyLF9mPkaO4sBM5EbrV89LXbD+OPqn10X2Mu4trI3bd4
|
||||||
|
R02Pl0A/rDO/S7bOGc4HGGPSsmgeoapydvkqgnXL497zD1Sv103n96hiuq4Dhurj
|
||||||
|
gfnGxQvEN7MCc31HE2ufkTHjNc62RatseiCLxJE3sBhMl9aaNEhtM3FNDXZnhMbs
|
||||||
|
0/7C2b5kSg==
|
||||||
|
-----END CERTIFICATE-----
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
-----BEGIN DH PARAMETERS-----
|
||||||
|
MIGHAoGBAOjeZEDvMxiY+T4AMUIJ6jPFhflzUwO6EPBc0+Fn3C13WGQgsx9N3Rjg
|
||||||
|
bZsF4Sbqs62+KFTYb5/1PVPSOxyif0CJLRC8VhvCl5CZ2DsS6nJ3sstPxtfhQdn+
|
||||||
|
X1kbvqAbHlvNtE6w5ketHv3gK6y4d9qdVnwicZW3uV1sJ2dg4RfDAgEC
|
||||||
|
-----END DH PARAMETERS-----
|
||||||
28
zefie_wtvp_minisrv/includes/ServiceDeps/msntv2/msntv2.key
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCs3nFvw+pQo01O
|
||||||
|
K0a7HIknESxZMi3u3t6htKrX5XeFOmSckSylGlsl4PkSnzqlafhoahZhPQlT3DgV
|
||||||
|
EkU9oE8AyYsVMhi/VvJKUXCdr7knrt0C0ybn0+u3dlLDZ1Clp2zcsZlFKmRjWa/0
|
||||||
|
YLZNVWT9MA1ZmZZi8Rlnj/YTZi4wlnq/qA0hjtil8noXpDj538OCu+jDgTfmWY24
|
||||||
|
zRj3mx0yErLwdMnR5xT9swsrKhddnK3svF7NP5PDcnYQNVXTeUNdmFvSHZkQKakI
|
||||||
|
CCcqxD9aYsyMQZ6iMNCeb5DNNoUeo7TXjxExtg2XFREJlWX6R5h7UtMdb8r7Z/nw
|
||||||
|
N54jTPXXAgMBAAECggEAN5W7IfX8FPu9csIllyrAyygRe4jQDjvpmFNwj8VAHj29
|
||||||
|
dj6T/W6xGkfxrtQ2VlPxxRk/ovquUiHAgr4CN6OhY55qs2ENZhD+DXmMXZfQUHtA
|
||||||
|
o5TjsK2K4M4SJLTG0M06CuisYPoVl4CSPGEQnWM0+tiFombpXV0rDwrSVECJ36Mr
|
||||||
|
x/HPoMJQPewBSI4lG2ACQMBmQ+7WQVwl0mprJjIFJYW9BXFRkqmFKSXq6G302VcH
|
||||||
|
VOjiSOF/8BR64worbo9UrpPBPMLZMAW1rwZx50Chwhplben8B2uQNSqrc7Q9ZA3C
|
||||||
|
2XJ8Wi0KCeYmJy+xng3LT22Sdme1UC8YfC9iCsHfaQKBgQDe3sN97UK+WVIgvA8Q
|
||||||
|
+4+rpkUWOy/dCoTzPuxHy4qSTHyF723+URyVkNF/P5EtwKwpIuJ/WMwIyUF0EqLQ
|
||||||
|
0+6HrmqfO5CR+p/2xJhFPHi1qn3uCM8pw5O9i5MjhOr1jM1RQz1xe0rToLiTlq3x
|
||||||
|
sSrYzDmIs61kBH2NKaVp38Oh5QKBgQDGkObMw8Gyn5JT1ewkS0VGDT5bbVK5sptJ
|
||||||
|
KTkaikKTuNV5RLya+7SxnR7rOBWWLN+ZpdQygM8IlUh0TJiTZazUkKUSNv3isIbF
|
||||||
|
rfak10q8Zad6RkaQyyH7GKhBOnMs0z3kqgL0SvNhoIs2KKsE46UoMVE49/C9Ma8Y
|
||||||
|
zbdEBLTtCwKBgQCRJc934d/IDHAadZ/yVYOaLO1trxpbARDZQq+rinozEbE/oVGn
|
||||||
|
gbf2CJ0IHKQ2gfcdy2Rrv68SQdBpAgIbswr0Prmd/rMG/4zSr/LjlKCg3+qn7gDN
|
||||||
|
mFxN4+ruBRDo3syREhOgJsXy0gejx0x9zf6ztz35M9vG+c2y896Q93R3qQKBgA/e
|
||||||
|
AmN4fSD9+V5zqMQZs7ZuVn5N1R97s0b8YVDKnZlaWsyu/ndQB9dtm8vmFmuCuHd5
|
||||||
|
teQ3QNQJwdlxSXv10wLFcDttY4pa2tovFZeEkLdPVDvEI91sLhH3nXJg7lU1qCt+
|
||||||
|
nm/REXPKtXUleM0SN99nWXs47ObhcoGD5tIroh2TAoGBAISazlBBrmnNOavnUzWa
|
||||||
|
Ka2uXk/2txan8Fh9jul0g6GPPsI7Ej3YMf3ccC9iotVugteHrBUK0cNbesydw3J0
|
||||||
|
PIs05XLX0curxoTox2Jeynq+ajy2tnmrDHDfilXdxRt2rsQlobZi3qoJskwPFYhf
|
||||||
|
ssL5LnP78Pv/t2H01jDSpZXu
|
||||||
|
-----END PRIVATE KEY-----
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
const minisrv_service_file = true;
|
||||||
|
|
||||||
|
headers = `200 OK
|
||||||
|
Content-type: text/html`;
|
||||||
|
|
||||||
|
data = `<HTML>
|
||||||
|
<HEAD>
|
||||||
|
<title id="title"></title>
|
||||||
|
</HEAD>
|
||||||
|
<body>
|
||||||
|
<iframe id=checkmail style="display:none"></iframe>
|
||||||
|
<script language="javascript">
|
||||||
|
var tvShell = new ActiveXObject("MSNTV.TVShell");
|
||||||
|
function IsNightlyEnabled() {
|
||||||
|
var taskScheduler = tvShell.TaskScheduler;
|
||||||
|
var updateTask = null;
|
||||||
|
for (var i = 0; ((i < taskScheduler.Count) && (updateTask == null)); i++) {
|
||||||
|
if (taskScheduler.Item(i).Caller == 'NightlyUpdate') {
|
||||||
|
updateTask = taskScheduler.Item(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (updateTask != null) {
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function GotoBoxCheck() {
|
||||||
|
var url = 'https://sg1.trusted.msntv.msn.com/connection/boxcheck.html';
|
||||||
|
var parms='';
|
||||||
|
parms += 'BoxId=' + tvShell.SystemInfo.BoxIDService + '&';
|
||||||
|
parms += 'WANProvider=' + tvShell.ConnectionManager.WANProvider + '&';
|
||||||
|
parms += 'version=' + encodeURIComponent(tvShell.SystemInfo.LastVersion) + '&';
|
||||||
|
if ((tvShell.ConnectionManager.MSNIAManager != null) && (tvShell.ConnectionManager.MSNIAManager.CurrentConnector != null)) parms += 'ConnectorName=' + encodeURIComponent(tvShell.ConnectionManager.MSNIAManager.CurrentConnector.Name) + '&';
|
||||||
|
if (tvShell.UserManager.CurrentUser != null) parms += 'domain=' + encodeURIComponent(tvShell.UserManager.CurrentUser.Domain) + '&';
|
||||||
|
parms += 'NumRedirects=0&';
|
||||||
|
parms += 'NightlyEnabled=' + IsNightlyEnabled() + '&';
|
||||||
|
parms += 'x=y';
|
||||||
|
var myPanel = tvShell.PanelManager.Item('service');
|
||||||
|
if (myPanel) myPanel.PostToURL(url, parms);
|
||||||
|
}
|
||||||
|
var progressPanel = tvShell.PanelManager.Item('progress');
|
||||||
|
function SetProgress(text, percent) {
|
||||||
|
if (progressPanel) {
|
||||||
|
progressPanel.Document.SetProgressText(text);
|
||||||
|
progressPanel.Document.SetProgressPercent(percent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function IsServicePanel() {
|
||||||
|
if ((window.name == null) || ((window.name != null) && (window.name.toLowerCase() != 'service'))) {
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
return(true);
|
||||||
|
}
|
||||||
|
function DontContinue() {
|
||||||
|
var currentUser = tvShell.UserManager.CurrentUser;
|
||||||
|
if (currentUser != null && currentUser.IsAuthorized) {
|
||||||
|
window.location.replace(tvShell.UserManager.CurrentUser.ServiceList.Item('home::home').URL);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tvShell.ConnectionManager.ServiceState = 'ReSignIn';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!IsServicePanel()) {
|
||||||
|
DontContinue();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tvShell.MeteringManager.Stop();
|
||||||
|
SetProgress('Hello, New User.', 10);
|
||||||
|
GotoBoxCheck();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</HTML>
|
||||||
|
`;
|
||||||
|
After Width: | Height: | Size: 43 B |
@@ -0,0 +1,528 @@
|
|||||||
|
const minisrv_service_file = true;
|
||||||
|
|
||||||
|
// Weather placeholder (static defaults — no live API)
|
||||||
|
const WeatherCity = 'Your City';
|
||||||
|
const WeatherTemp = '72';
|
||||||
|
const WeatherDescription = 'Sunny';
|
||||||
|
const WeatherIcon = '/Pages/Home/Weather/26.gif';
|
||||||
|
|
||||||
|
// News headlines
|
||||||
|
const NewsLink1 = 'http://sg1.trusted.msntv.msn.com/Pages/Tricks/he.mp3';
|
||||||
|
const NewsLink2 = 'http://sg1.trusted.msntv.msn.com/Pages/Tricks/pokemon-black-2.mp3';
|
||||||
|
const NewsLink3 = 'http://sg1.trusted.msntv.msn.com/Pages/Tricks/he.mp3';
|
||||||
|
const NewsTitle1 = 'Ryder Smells';
|
||||||
|
const NewsTitle2 = 'Ryder Smells';
|
||||||
|
const NewsTitle3 = 'Ryder Smells';
|
||||||
|
|
||||||
|
headers = `200 OK
|
||||||
|
Content-type: text/html`;
|
||||||
|
|
||||||
|
data = `<html xmlns:msntv>
|
||||||
|
<?import namespace="msntv" implementation="Shared/Anduril/HTC/en-us/TruncatedHtml.htc"?>
|
||||||
|
|
||||||
|
<head><title>Home</title>
|
||||||
|
<?import namespace="msntv" implementation="HTC/Shared/CustomButton.htc"?>
|
||||||
|
<?import namespace="msntv" implementation="/Pages/Home/Shared/BaseClient/HTCTransforms/en-us/LoopingDIV.htc"?>
|
||||||
|
|
||||||
|
<script src="/Include/2.0.261.900/localhost-1700/Shared/BaseClient/JsTransforms/en-us/PaneHelp.js" language="javascript" defer="true"></script>
|
||||||
|
<link href="/Include/2.0.261.778/localhost-1700/Home/Anduril/CssTransforms/en-us/Home.css" type="text/css" rel="StyleSheet">
|
||||||
|
<script src="/Include/2.0.261.778/localhost-1700/Home/Anduril/JsTransforms/en-us/Home.js" language="javascript"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var forceReload = false;
|
||||||
|
var l = 'd:' + new Date().valueOf() + '|';
|
||||||
|
function setCookie(name, value) {
|
||||||
|
{
|
||||||
|
var now = new Date();
|
||||||
|
var expires = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate());
|
||||||
|
document.cookie = escape(name) + '=' + escape(value) + ';expires=' + expires.toGMTString() + ';path=/';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function getCookie(name) {
|
||||||
|
{
|
||||||
|
var str = document.cookie;
|
||||||
|
var arr = str.split('; ');
|
||||||
|
for (var i = arr.length - 1; i >= 0; i--) {
|
||||||
|
{
|
||||||
|
var c = arr[i].split('=');
|
||||||
|
if (c.length != 2)
|
||||||
|
continue;
|
||||||
|
if (unescape(c[0]) == name)
|
||||||
|
return unescape(c[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
function syncCookie(cookieName, propValue) {
|
||||||
|
{
|
||||||
|
var c = getCookie(cookieName);
|
||||||
|
l += 'g:' + cookieName + ':' + c + '|';
|
||||||
|
if (c != propValue) {
|
||||||
|
{
|
||||||
|
setCookie(cookieName, propValue);
|
||||||
|
l += 's:' + cookieName + ':' + propValue + '|';
|
||||||
|
var check = getCookie(cookieName);
|
||||||
|
if (check == propValue)
|
||||||
|
forceReload = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var d = new Date();
|
||||||
|
var utcOffset = d.getTimezoneOffset();
|
||||||
|
syncCookie('UserUtcOffset', utcOffset);
|
||||||
|
var connSpeed;
|
||||||
|
try { { connSpeed = window.external.ClientCaps.connectionType; } }
|
||||||
|
catch (e) {
|
||||||
|
{
|
||||||
|
connSpeed = "undetected";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
syncCookie('UserConnectionSpeed', connSpeed);
|
||||||
|
try {
|
||||||
|
{
|
||||||
|
top.log(l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (forceReload)
|
||||||
|
location.replace(location.href);
|
||||||
|
</script></head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<body onload="initPage();" scroll="no" tabindex="-1">
|
||||||
|
|
||||||
|
<div id="focdiv" style="position:absolute;top:314px;left:27px;width:70px;height:70px;" onclick="goToMail();">
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
document.all["focdiv"].focus();
|
||||||
|
|
||||||
|
function handleLoopingDivReady()
|
||||||
|
{
|
||||||
|
document.all["focdiv"].style.display = "none";
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="topdiv">
|
||||||
|
|
||||||
|
<div class="textMenu">
|
||||||
|
<script xmlns:msntvuxp="msntvuxp.microsoft.com">
|
||||||
|
function goToService(serviceName) {window.location = window.external.SafeGetServiceURL(serviceName);}
|
||||||
|
function goToCenter(svcURL) {window.location = svcURL;}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div style="position:absolute; left:0px; top:0px" xmlns:msntvuxp="msntvuxp.microsoft.com">
|
||||||
|
<table border="0" class="TextMenuTbl">
|
||||||
|
<tr height="34" style="background-color: transparent;">
|
||||||
|
<td class="leftGradientTD"></td><td class="rightGradientTD">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="position:absolute; left:0px; top:0px" xmlns:msntvuxp="msntvuxp.microsoft.com">
|
||||||
|
<table border="0" class="TextMenuTbl">
|
||||||
|
<tr>
|
||||||
|
<td style="background-color: transparent;" width="8">
|
||||||
|
<img height="1" src="/Images/Shared/s.gif" width="8">
|
||||||
|
</td>
|
||||||
|
<td style="background-color: transparent;" align="left" width="162">
|
||||||
|
<a class="TextMenuLink" href="javascript:goToCenter('/Pages/UsingMSNTV/Main');" id="UsingMSNTVLinkID" onblur="umtvHasFocus=false">Using MSN TV</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span style="position:absolute;left:0;top:35px;width:100%;height:2px;background-color:#8fc3d6;">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<td style="background-color: transparent;" align="left" width="115">
|
||||||
|
<a class="TextMenuLink" href="javascript:void(window.open(' ', 'signout', 'msntv:panel'));" id="SignoutLinkID">Sign Out</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span style="position:absolute;left:0;top:35px;width:100%;height:2px;background-color:#8fc3d6;"></span>
|
||||||
|
</div>
|
||||||
|
<td style="background-color: transparent;" align="left" width="106">
|
||||||
|
<a class="TextMenuLink" href="javascript:goToService('UAM::UAMbase');" id="AccountLinkID">Account</a>
|
||||||
|
</td>
|
||||||
|
<div>
|
||||||
|
<span style="position:absolute;left:0;top:35px;width:100%;height:2px;background-color:#8fc3d6;">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<td style="background-color: transparent;" align="left" width="109">
|
||||||
|
<a class="TextMenuLink" href="javascript:goToService('settings::mainindex');" id="SettingsLinkID">Settings</a>
|
||||||
|
</td>
|
||||||
|
<div><span style="position:absolute;left:0;top:35px;width:100%;height:2px;background-color:#8fc3d6;">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<td style="background-color: transparent;" align="left" width="78">
|
||||||
|
<a href='javascript:CallPaneHelp(PH_TOC);' id="HelpLinkID">
|
||||||
|
|
||||||
|
<table><tr>
|
||||||
|
<td valign="middle" class="TextMenuLinkSimulation">Help</td>
|
||||||
|
<td valign="middle" width="30" height="20">
|
||||||
|
<span id="helpIcon" style='src:url(msntv:/Shared/Images/Icon_Help_RelatedLink.png);'></span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<div>
|
||||||
|
<span style="position:absolute;left:0;top:35px;width:100%;height:2px;background-color:#8fc3d6;">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="infoPaneDiv">
|
||||||
|
|
||||||
|
<div class="promoImgDiv">
|
||||||
|
<div style="position:absolute; left:0px; top:0px">
|
||||||
|
<img id="PromoImageID" width="178" height="135" border="0" hspace="0" alt="Promotional Image" src="/Pages/Home/ads/webtv3.gif">
|
||||||
|
</div>
|
||||||
|
<div style="position:absolute; left:5px; top:0px"><a id="PromoImageLinkID" href="">
|
||||||
|
<table width="173" height="135"><tr><td></td></tr></table></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="timerRotatorDiv" class="personalPanelDiv" onclick="ClickRotator()">
|
||||||
|
<div>
|
||||||
|
<div style="top:0px; left:0px; width:176px; height:105px;" xmlns:msntvuxp="msntvuxp.microsoft.com">
|
||||||
|
<div class="PNGImage" style="width:176px;height:105px;src:/images/Home/HomeRotatorBGWeather.png;"></div>
|
||||||
|
</div>
|
||||||
|
<div style="position:absolute; top:0px; left:0px; width:178px; height:107px;" xmlns:msntvuxp="msntvuxp.microsoft.com">
|
||||||
|
<table class="wthrTbl" border="0" cellpadding="1" cellspacing="0">
|
||||||
|
<tr>
|
||||||
|
<td height="4" width="4" rowspan="4"><img src="images/Shared/s.gif" height="4" width="4"></td>
|
||||||
|
<td height="4" width="45"><img src="images/Shared/s.gif" height="4" width="45"></td>
|
||||||
|
<td height="4" width="10"><img src="images/Shared/s.gif" height="4" width="10"></td>
|
||||||
|
<td height="4" width="65"><img src="images/Shared/s.gif" height="4" width="65"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="CityCellID" class="wthrCityCell" colspan="3" valign="top">
|
||||||
|
<span class="wthrCityText">${WeatherCity}</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="TRCID" class="wthrTempCond">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td id="TemperatureCellID" class="wthrTempCell">
|
||||||
|
<span class="wthrTempTxt">${WeatherTemp}°F</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="ConditionCellID" class="wthrCondCell">
|
||||||
|
<span class="wthrCondTxt">${WeatherDescription}</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td id="PaddingID" width="10"><img src="images/Shared/s.gif" height="1" width="10"></td>
|
||||||
|
<td id="ConditionIconID" class="wthrCondIcon">
|
||||||
|
<img src="${WeatherIcon}" alt="Weather icon" style="width:65px;height:61px;">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="ProviderID" class="wthrProvider" colspan="3">
|
||||||
|
Open-Meteo
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script xmlns:msntvuxp="msntvuxp.microsoft.com">
|
||||||
|
function clickPageRotatePanel() {
|
||||||
|
location.href = "/Pages/weather/yourcity";
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
InitRotator(timerRotatorDiv, 5000, new Array("/home/MoneyModule.aspx","/Pages/weather/WeatherModule"));
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div ID="clockID" class="clockDiv">
|
||||||
|
</div>
|
||||||
|
<script>clockID.innerHTML = formClockLink();</script>
|
||||||
|
|
||||||
|
<div class="newsHdlnDiv">
|
||||||
|
<div class="newsHdlnTitleDiv"><span class="newsHdlnTitleText">Today on TV2</span></div>
|
||||||
|
<table style="top:0px;left:0px;width:365px;height:78px;">
|
||||||
|
<tr><td><a class="newsHdlnLink" id="newsHdlnLinkID1" href="${NewsLink1}">${NewsTitle1}</a></td></tr>
|
||||||
|
<tr><td><a class="newsHdlnLink" id="newsHdlnLinkID2" href="${NewsLink2}">${NewsTitle2}</a></td></tr>
|
||||||
|
<tr><td><a class="newsHdlnLink" id="newsHdlnLinkID3" href="${NewsLink3}">${NewsTitle3}</a></td></tr>
|
||||||
|
</table>
|
||||||
|
<div class="moreNewsDiv">
|
||||||
|
<table><tr>
|
||||||
|
<td><img src="msntv:/Shared/images/BulletCustom.gif" height="14" width="7"></td>
|
||||||
|
<td><img src="images/Shared/s.gif" height="1" width="4"></td>
|
||||||
|
<td style="height:37px"><a id="moreNewsLinkID" class="moreNewsLink" href="../pages/TopStories">More MSN news</a></td>
|
||||||
|
</tr></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="promoPanelDiv">
|
||||||
|
<div style="position:absolute; width:355px; height:70px;">
|
||||||
|
<table style="width:365px;">
|
||||||
|
<td class="promoHdlnTitle" style="color:#1D704C">Using MSN TV</td>
|
||||||
|
<tr>
|
||||||
|
<td class="promoHdlnCell"><a class="promoHdlnLink" id="promoHdlnLinkID1" href="http://msntv.msn.com/pages/usingmsntv/tippage.aspx?id=set15">Tip: Turn on audible dialing </a></td></tr><tr>
|
||||||
|
<td class="promoHdlnCell"><a class="promoHdlnLink" id="promoHdlnLinkID2" href="http://msntv.msn.com/pages/UsingMSNTV/Article.aspx?id=feature3">Get better printing results</a></td></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div style="position:absolute; left:161px; top:74px; width:200px;">
|
||||||
|
<table class="MoreUsingLinkTable"><tr>
|
||||||
|
<td><img src="msntv:/Shared/Images/BulletCustom.gif" height="14" width="7"></td>
|
||||||
|
<td><img src="/Images/Shared/s.gif" height="1" width="4"></td>
|
||||||
|
<td>
|
||||||
|
<a id="MoreUsingLinkID" class="MoreNewsLink" href="http://headwaiter.trusted.msntv.msn.com/Pages/UsingMSNTV/Main">Go to Using MSN TV</a>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="searchID" class="searchDiv">
|
||||||
|
<div class="searchCenterDiv">
|
||||||
|
<script>
|
||||||
|
function doSearch(country){
|
||||||
|
if (searchFormID.searchFieldID.value == "")
|
||||||
|
{
|
||||||
|
window.location = window.external.SafeGetServiceURL('search::search') + "?FORM=WEBTV&cfg=MSTVXML&v=1&c="+country+"&x=26&y=14";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
window.location = window.external.SafeGetServiceURL('search::search') + "?FORM=WEBTV&cfg=MSTVXML&v=1&c="+country+"&x=26&y=14&q=" + escape(searchFormID.searchFieldID.value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<div style="position:absolute; z-index:1; left:0; top:0px; width:100%; height:2px; background-color:#0c7faa;">
|
||||||
|
<table style="width:100%; height:2px;"><tr><td height="2"></td></tr></table>
|
||||||
|
</div>
|
||||||
|
<table class="searchTbl">
|
||||||
|
<form id="searchFormID" action="javascript:doSearch('US')">
|
||||||
|
<tr>
|
||||||
|
<td width="10"></td>
|
||||||
|
<td><a class="searchLink" href="javascript:doSearch('US');">Search</a><span class="searchLabelText"> or type www</span></td>
|
||||||
|
<td></td>
|
||||||
|
<td><span class="searchFieldText"><input id="searchFieldID" name="searchFieldName" class="searchField" type="text" size="28"></span></td>
|
||||||
|
<td></td>
|
||||||
|
<td valign="center"><msntv:custombutton id="GoButtonID" onClick="doSearch('US');" label="Go" /></td>
|
||||||
|
</tr></form></table>
|
||||||
|
<div style="position:absolute; left:0; top:33px; width:100%; height:2px; background-color:#1c4373;">
|
||||||
|
<table style="width:100%; height:2px;"><tr><td height="2"></td></tr></table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="iconNavBarID" class="iconNavBar">
|
||||||
|
<table class="iconNavBarMasterTbl">
|
||||||
|
<tr>
|
||||||
|
<td align="center" valign="middle">
|
||||||
|
<table class="iconNavBarTbl">
|
||||||
|
<tr>
|
||||||
|
<td class="iconNavBarTblFrameCell">
|
||||||
|
<table class="ApolloIcons" xmlns:msntv="http://tv.msn.com">
|
||||||
|
<tr height="70">
|
||||||
|
<td>
|
||||||
|
<msntv:loopingDIV id="navbar" hasInitialFocus="true" divWidthPX="554" onLoopingDivReady="handleLoopingDivReady()" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<script>
|
||||||
|
var nIcons;
|
||||||
|
var ImgURL = new Array();
|
||||||
|
var ImgWidth = new Array();
|
||||||
|
var ImgOverURL = new Array();
|
||||||
|
var IconURL = new Array();
|
||||||
|
|
||||||
|
function goToFavorites() {
|
||||||
|
window.open(" ", "favoritespanel", "msntv:panel");
|
||||||
|
}
|
||||||
|
function goToMessenger() {
|
||||||
|
if (window.external.SafeGetServiceURL('messenger::root') != null && window.external.SafeGetServiceURL('messenger::root') != "") window.open(" ", "impanel", "msntv:panel");
|
||||||
|
else window.location = "msntv:/OLTK/IMBlock.html";
|
||||||
|
}
|
||||||
|
function goToMail() {
|
||||||
|
if (window.external.SafeGetServiceURL('mail::listmail') != null && window.external.SafeGetServiceURL('mail::listmail') != "") window.location = window.external.SafeGetServiceURL('mail::listmail');
|
||||||
|
else window.location = "msntv:/OLTK/EmailBlock.html";
|
||||||
|
}
|
||||||
|
function goToChat() {
|
||||||
|
if (window.external.SafeGetServiceURL('chat::home') != null && window.external.SafeGetServiceURL('chat::home') != "") window.location = window.external.SafeGetServiceURL('chat::home');
|
||||||
|
else window.location = "msntv:/OLTK/chatBlock.html";
|
||||||
|
}
|
||||||
|
function goToSearch() { window.location = window.external.SafeGetServiceURL('search::main'); }
|
||||||
|
function goToMaps() { window.location = window.external.SafeGetServiceURL('maps::main'); }
|
||||||
|
function goToMusicHome() { window.location = window.external.SafeGetServiceURL('Music::Home'); }
|
||||||
|
function goToVideoHome() { window.location = window.external.SafeGetServiceURL('Video::Home'); }
|
||||||
|
function goToNetwork() { window.location = window.external.SafeGetServiceURL('Settings::HomeNetwork'); }
|
||||||
|
function goToAccount() { window.location = window.external.SafeGetServiceURL('UAM::UAMbase'); }
|
||||||
|
function goToSettings() { window.location = window.external.SafeGetServiceURL('settings::mainindex'); }
|
||||||
|
function goToCenter(svcURL) { window.location = svcURL; }
|
||||||
|
function goToPhotosApp() { window.location = window.external.SafeGetServiceURL('Photos'); }
|
||||||
|
function goToPhotosHome() { window.location = window.external.SafeGetServiceURL('Photo::Home'); }
|
||||||
|
|
||||||
|
function initIcons() {
|
||||||
|
var dq = '"';
|
||||||
|
for (index = 0; index < nIcons; index++) {
|
||||||
|
var realIndex = (index + nIcons - 1) % nIcons;
|
||||||
|
var cellHTML = '<span' +
|
||||||
|
' onFocus=' + dq + 'ImgObjs' + realIndex + ".src='" + ImgOverURL[realIndex] + "';" + dq +
|
||||||
|
' onBlur=' + dq + 'ImgObjs' + realIndex + ".src='" + ImgURL[realIndex] + "';" + dq +
|
||||||
|
' onClick=' + dq + IconURL[realIndex] + dq +
|
||||||
|
'><img id=' + dq + 'ImgObjs' + realIndex + dq +
|
||||||
|
" src='" + ImgURL[realIndex] + "' width=" + ImgWidth[realIndex] + ' height=61 border=0></span>';
|
||||||
|
navbar.AddCellHTML(cellHTML, ImgWidth[realIndex]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ImgURL[0] = "/Images/Home/HomeIconFav.jpg";
|
||||||
|
ImgOverURL[0] = "/Images/Home/HomeIconFavOver.jpg";
|
||||||
|
ImgWidth[0] = 87;
|
||||||
|
IconURL[0] = "javascript:goToFavorites();";
|
||||||
|
|
||||||
|
ImgURL[1] = "/Images/Home/HomeIconMail.jpg";
|
||||||
|
ImgOverURL[1] = "/Images/Home/HomeIconMailOver.jpg";
|
||||||
|
ImgWidth[1] = 70;
|
||||||
|
IconURL[1] = "javascript:goToMail();";
|
||||||
|
|
||||||
|
ImgURL[2] = "/Images/Home/HomeIconMsgr.jpg";
|
||||||
|
ImgOverURL[2] = "/Images/Home/HomeIconMsgrOver.jpg";
|
||||||
|
ImgWidth[2] = 99;
|
||||||
|
IconURL[2] = "javascript:goToMessenger();";
|
||||||
|
|
||||||
|
ImgURL[3] = "/Images/Home/HomeIconMaps.jpg";
|
||||||
|
ImgOverURL[3] = "/Images/Home/HomeIconMapsOver.jpg";
|
||||||
|
ImgWidth[3] = 60;
|
||||||
|
IconURL[3] = "javascript:goToMaps();";
|
||||||
|
|
||||||
|
ImgURL[4] = "/Images/Home/HomeIconPhoto.jpg";
|
||||||
|
ImgOverURL[4] = "/Images/Home/HomeIconPhotoOver.jpg";
|
||||||
|
ImgWidth[4] = 70;
|
||||||
|
IconURL[4] = "javascript:goToPhotosApp();";
|
||||||
|
|
||||||
|
ImgURL[5] = "/Images/Home/HomeIconVideos.jpg";
|
||||||
|
ImgOverURL[5] = "/Images/Home/HomeIconVideosOver.jpg";
|
||||||
|
ImgWidth[5] = 70;
|
||||||
|
IconURL[5] = "javascript:goToVideoHome();";
|
||||||
|
|
||||||
|
ImgURL[6] = "/Images/Home/HomeIconMusic.jpg";
|
||||||
|
ImgOverURL[6] = "/Images/Home/HomeIconMusicOver.jpg";
|
||||||
|
ImgWidth[6] = 66;
|
||||||
|
IconURL[6] = "javascript:goToMusicHome();";
|
||||||
|
|
||||||
|
ImgURL[7] = "/Images/Home/HomeIconDiscuss.jpg";
|
||||||
|
ImgOverURL[7] = "/Images/Home/HomeIconDiscussOver.jpg";
|
||||||
|
ImgWidth[7] = 72;
|
||||||
|
IconURL[7] = "javascript:goToCenter('/Pages/Discuss/Home.aspx');";
|
||||||
|
|
||||||
|
ImgURL[8] = "/Images/Home/HomeIconMSNBC.jpg";
|
||||||
|
ImgOverURL[8] = "/Images/Home/HomeIconMSNBCOver.jpg";
|
||||||
|
ImgWidth[8] = 68;
|
||||||
|
IconURL[8] = "javascript:goToCenter('/Pages/News/TopStories.aspx');";
|
||||||
|
|
||||||
|
ImgURL[9] = "/Images/Home/HomeIconTWC.jpg";
|
||||||
|
ImgOverURL[9] = "/Images/Home/HomeIconTWCOver.jpg";
|
||||||
|
ImgWidth[9] = 81;
|
||||||
|
IconURL[9] = "javascript:goToCenter('/Pages/Weather/MyCity.aspx');";
|
||||||
|
|
||||||
|
ImgURL[10] = "/Images/Home/HomeIconEnt.jpg";
|
||||||
|
ImgOverURL[10] = "/Images/Home/HomeIconEntOver.jpg";
|
||||||
|
ImgWidth[10] = 125;
|
||||||
|
IconURL[10] = "javascript:goToCenter('/Pages/Entertainment/Home.aspx');";
|
||||||
|
|
||||||
|
ImgURL[11] = "/Images/Home/HomeIconTVListings.jpg";
|
||||||
|
ImgOverURL[11] = "/Images/Home/HomeIconTVListingsOver.jpg";
|
||||||
|
ImgWidth[11] = 96;
|
||||||
|
IconURL[11] = "javascript:goToCenter('http://tv.msn.com/tv/guide');";
|
||||||
|
|
||||||
|
ImgURL[12] = "/Images/Home/HomeIconSports.jpg";
|
||||||
|
ImgOverURL[12] = "/Images/Home/HomeIconSportsOver.jpg";
|
||||||
|
ImgWidth[12] = 82;
|
||||||
|
IconURL[12] = "javascript:goToCenter('/Pages/Sports/Main.aspx');";
|
||||||
|
|
||||||
|
ImgURL[13] = "/Images/Home/HomeIconMoney.jpg";
|
||||||
|
ImgOverURL[13] = "/Images/Home/HomeIconMoneyOver.jpg";
|
||||||
|
ImgWidth[13] = 68;
|
||||||
|
IconURL[13] = "javascript:goToCenter('/Pages/Money/Home.aspx');";
|
||||||
|
|
||||||
|
ImgURL[14] = "/Images/Home/HomeIconShopping.jpg";
|
||||||
|
ImgOverURL[14] = "/Images/Home/HomeIconShoppingOver.jpg";
|
||||||
|
ImgWidth[14] = 62;
|
||||||
|
IconURL[14] = "javascript:goToCenter('/Pages/Shopping/Main.aspx');";
|
||||||
|
|
||||||
|
ImgURL[15] = "/Images/Home/HomeIconGames.jpg";
|
||||||
|
ImgOverURL[15] = "/Images/Home/HomeIconGamesOver.jpg";
|
||||||
|
ImgWidth[15] = 70;
|
||||||
|
IconURL[15] = "javascript:goToCenter('/Pages/Games/Home.aspx');";
|
||||||
|
|
||||||
|
ImgURL[16] = "/Images/Home/HomeIconEncarta.jpg";
|
||||||
|
ImgOverURL[16] = "/Images/Home/HomeIconEncartaOver.jpg";
|
||||||
|
ImgWidth[16] = 74;
|
||||||
|
IconURL[16] = "javascript:goToCenter('http://g.msn.com/5TVANDURIL/1505')";
|
||||||
|
|
||||||
|
ImgURL[17] = "/Images/Home/HomeIconChat.jpg";
|
||||||
|
ImgOverURL[17] = "/Images/Home/HomeIconChatOver.jpg";
|
||||||
|
ImgWidth[17] = 55;
|
||||||
|
IconURL[17] = "javascript:goToChat();";
|
||||||
|
|
||||||
|
ImgURL[18] = "/Images/Home/HomeIconUsingMSN.jpg";
|
||||||
|
ImgOverURL[18] = "/Images/Home/HomeIconUsingMSNOver.jpg";
|
||||||
|
ImgWidth[18] = 127;
|
||||||
|
IconURL[18] = "javascript:goToCenter('/Pages/UsingMSNTV/Main');";
|
||||||
|
|
||||||
|
ImgURL[19] = "/Images/Home/HomeIconTTT.jpg";
|
||||||
|
ImgOverURL[19] = "/Images/Home/HomeIconTTTOver.jpg";
|
||||||
|
ImgWidth[19] = 116;
|
||||||
|
IconURL[19] = "javascript:goToCenter('/Pages/UsingMSNTV/ThingstoTry');";
|
||||||
|
|
||||||
|
ImgURL[20] = "/Images/Home/HomeIconSearch.jpg";
|
||||||
|
ImgOverURL[20] = "/Images/Home/HomeIconSearchOver.jpg";
|
||||||
|
ImgWidth[20] = 84;
|
||||||
|
IconURL[20] = "javascript:goToSearch();";
|
||||||
|
|
||||||
|
ImgObjs = new Array();
|
||||||
|
ImgOverObjs = new Array();
|
||||||
|
nIcons = ImgURL.length;
|
||||||
|
ImgOverObjs[0] = new Image();
|
||||||
|
ImgOverObjs[0].src = ImgOverURL[0];
|
||||||
|
for (var i = 0; i < nIcons; i++) {
|
||||||
|
ImgObjs[i] = new Image();
|
||||||
|
ImgObjs[i].src = ImgURL[i];
|
||||||
|
}
|
||||||
|
for (var i = 1; i < nIcons; i++) {
|
||||||
|
ImgOverObjs[i] = new Image();
|
||||||
|
ImgOverObjs[i].src = ImgOverURL[i];
|
||||||
|
}
|
||||||
|
initIcons();
|
||||||
|
</script>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function callCGif()
|
||||||
|
{
|
||||||
|
var i = new Image();
|
||||||
|
i.src = "http://c.msn.com/c.gif?DI=1455&PI=68206&PS=45577&TP=http://msntv.msn.com/HomePage.htm&RF=";
|
||||||
|
}
|
||||||
|
window.attachEvent("onload", callCGif);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body></html>`;
|
||||||
@@ -0,0 +1,629 @@
|
|||||||
|
@page "/Pages/Home/Home.aspx"
|
||||||
|
@using MSNTV2MainServer.Components.Layout
|
||||||
|
@using Microsoft.AspNetCore.Http
|
||||||
|
@using Microsoft.AspNetCore.Components
|
||||||
|
@using MSNTV2MainServer.Components.APIs
|
||||||
|
@inject IHttpContextAccessor httpContextAccessor
|
||||||
|
|
||||||
|
@layout EmptyLayout
|
||||||
|
|
||||||
|
@if (IsTV2)
|
||||||
|
{
|
||||||
|
|
||||||
|
MarkupString htmlContent = new MarkupString($@"
|
||||||
|
<html xmlns:msntv>
|
||||||
|
<?import namespace=""msntv"" implementation=""Shared/Anduril/HTC/en-us/TruncatedHtml.htc""?>
|
||||||
|
|
||||||
|
<head><title>Home</title>
|
||||||
|
<?import namespace=""msntv"" implementation=""HTC/Shared/CustomButton.htc""?>
|
||||||
|
<?import namespace=""msntv"" implementation=""/Pages/Home/Shared/BaseClient/HTCTransforms/en-us/LoopingDIV.htc""?>
|
||||||
|
|
||||||
|
<script src=""/Include/2.0.261.900/localhost-1700/Shared/BaseClient/JsTransforms/en-us/PaneHelp.js"" language=""javascript"" defer=""true""></script>
|
||||||
|
<link href=""/Include/2.0.261.778/localhost-1700/Home/Anduril/CssTransforms/en-us/Home.css"" type=""text/css"" rel=""StyleSheet"">
|
||||||
|
<script src=""/Include/2.0.261.778/localhost-1700/Home/Anduril/JsTransforms/en-us/Home.js"" language=""javascript""></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var forceReload = false;
|
||||||
|
var l = 'd:' + new Date().valueOf() + '|';
|
||||||
|
function setCookie(name, value) {{
|
||||||
|
{{
|
||||||
|
var now = new Date();
|
||||||
|
var expires = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate());
|
||||||
|
document.cookie = escape(name) + '=' + escape(value) + ';expires=' + expires.toGMTString() + ';path=/';
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
function getCookie(name) {{
|
||||||
|
{{
|
||||||
|
var str = document.cookie;
|
||||||
|
var arr = str.split('; ');
|
||||||
|
for (var i = arr.length - 1; i >= 0; i--) {{
|
||||||
|
{{
|
||||||
|
var c = arr[i].split('=');
|
||||||
|
if (c.length != 2)
|
||||||
|
continue;
|
||||||
|
if (unescape(c[0]) == name)
|
||||||
|
return unescape(c[1]);
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
return null;
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
function syncCookie(cookieName, propValue) {{
|
||||||
|
{{
|
||||||
|
var c = getCookie(cookieName);
|
||||||
|
l += 'g:' + cookieName + ':' + c + '|';
|
||||||
|
if (c != propValue) {{
|
||||||
|
{{
|
||||||
|
setCookie(cookieName, propValue);
|
||||||
|
l += 's:' + cookieName + ':' + propValue + '|';
|
||||||
|
var check = getCookie(cookieName);
|
||||||
|
if (check == propValue)
|
||||||
|
forceReload = true;
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
var d = new Date();
|
||||||
|
var utcOffset = d.getTimezoneOffset();
|
||||||
|
syncCookie('UserUtcOffset', utcOffset);
|
||||||
|
var connSpeed;
|
||||||
|
try {{ {{ connSpeed = window.external.ClientCaps.connectionType; }} }}
|
||||||
|
catch (e) {{
|
||||||
|
{{
|
||||||
|
connSpeed = ""undetected"";
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
syncCookie('UserConnectionSpeed', connSpeed);
|
||||||
|
try {{
|
||||||
|
{{
|
||||||
|
top.log(l);
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
catch (e) {{
|
||||||
|
{{
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
if (forceReload)
|
||||||
|
location.replace(location.href);
|
||||||
|
</script></head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<body onload=""initPage();"" scroll=""no"" tabindex=""-1"">
|
||||||
|
|
||||||
|
<div id=""focdiv"" style=""position:absolute;top:314px;left:27px;width:70px;height:70px;"" onclick=""goToMail();"">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
document.all[""focdiv""].focus();
|
||||||
|
|
||||||
|
// when looping div is ready, you can hide the invisible rectangle used for holding Mail's
|
||||||
|
function handleLoopingDivReady()
|
||||||
|
{{
|
||||||
|
document.all[""focdiv""].style.display = ""none"";
|
||||||
|
}}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class=""topdiv"">
|
||||||
|
|
||||||
|
|
||||||
|
<div class=""textMenu"">
|
||||||
|
<script xmlns:msntvuxp=""msntvuxp.microsoft.com"">
|
||||||
|
function goToService(serviceName) {{window.location = window.external.SafeGetServiceURL(serviceName);}}
|
||||||
|
function goToCenter(URL) {{window.location = URL;}}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div style=""position:absolute; left:0px; top:0px"" xmlns:msntvuxp=""msntvuxp.microsoft.com"">
|
||||||
|
<table border=""0"" class=""TextMenuTbl"">
|
||||||
|
<tr height=""34"" style=""background-color: transparent;"">
|
||||||
|
<td class=""leftGradientTD""></td><td class=""rightGradientTD"">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style=""position:absolute; left:0px; top:0px"" xmlns:msntvuxp=""msntvuxp.microsoft.com"">
|
||||||
|
<table border=""0"" class=""TextMenuTbl"">
|
||||||
|
<tr>
|
||||||
|
<td style=""background-color: transparent;"" width=""8"">
|
||||||
|
<img height=""1"" src=""/Images/Shared/s.gif"" width=""8"">
|
||||||
|
</td>
|
||||||
|
<td style=""background-color: transparent;"" align=""left"" width=""162"">
|
||||||
|
<a class=""TextMenuLink"" href=""javascript:goToCenter('/Pages/UsingMSNTV/Main');"" id=""UsingMSNTVLinkID"" onblur=""umtvHasFocus=false"">Using MSN TV</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span style=""position:absolute;left:0;top:35px;width:100%;height:2px;background-color:#8fc3d6;"">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<td style=""background-color: transparent;"" align=""left"" width=""115"">
|
||||||
|
<a class=""TextMenuLink"" href=""javascript:void(window.open(' ', 'signout', 'msntv:panel'));"" id=""SignoutLinkID"">Sign Out</a>
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span style=""position:absolute;left:0;top:35px;width:100%;height:2px;background-color:#8fc3d6;""></span>
|
||||||
|
</div>
|
||||||
|
<td style=""background-color: transparent;"" align=""left"" width=""106"">
|
||||||
|
<a class=""TextMenuLink"" href=""javascript:goToService('UAM::UAMbase');"" id=""AccountLinkID"">Account</a>
|
||||||
|
</td>
|
||||||
|
<div>
|
||||||
|
<span style=""position:absolute;left:0;top:35px;width:100%;height:2px;background-color:#8fc3d6;"">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<td style=""background-color: transparent;"" align=""left"" width=""109"">
|
||||||
|
<a class=""TextMenuLink"" href=""javascript:goToService('settings::mainindex');"" id=""SettingsLinkID"">Settings</a>
|
||||||
|
</td>
|
||||||
|
<div><span style=""position:absolute;left:0;top:35px;width:100%;height:2px;background-color:#8fc3d6;"">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<td style=""background-color: transparent;"" align=""left"" width=""78"">
|
||||||
|
<a href='javascript:CallPaneHelp(PH_TOC);' id=""HelpLinkID"">
|
||||||
|
|
||||||
|
<table><tr>
|
||||||
|
<td valign=""middle"" class=""TextMenuLinkSimulation"">Help</td>
|
||||||
|
<td valign=""middle"" width=""30"" height=""20"">
|
||||||
|
<span id=""helpIcon"" style='src:url(msntv:/Shared/Images/Icon_Help_RelatedLink.png);'></span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<div>
|
||||||
|
<span style=""position:absolute;left:0;top:35px;width:100%;height:2px;background-color:#8fc3d6;"">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div class=""infoPaneDiv"">
|
||||||
|
|
||||||
|
|
||||||
|
<div class=""promoImgDiv"">
|
||||||
|
<div style=""position:absolute; left:0px; top:0px"">
|
||||||
|
<img id=""PromoImageID"" width=""178"" height=""135"" border=""0"" hspace=""0"" alt=""Promotional Image"" src=""/Pages/Home/ads/webtv3.gif"">
|
||||||
|
</div>
|
||||||
|
<div style=""position:absolute; left:5px; top:0px""><a id=""PromoImageLinkID"" href="""">
|
||||||
|
<table width=""173"" height=""135""><tr><td></td></tr></table></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div id=""timerRotatorDiv"" class=""personalPanelDiv"" onclick=""ClickRotator()"">
|
||||||
|
<div>
|
||||||
|
<div style=""top:0px; left:0px; width:176px; height:105px;"" xmlns:msntvuxp=""msntvuxp.microsoft.com"">
|
||||||
|
<div class=""PNGImage"" style=""width:176px;height:105px;src:/images/Home/HomeRotatorBGWeather.png;""></div>
|
||||||
|
</div>
|
||||||
|
<div style=""position:absolute; top:0px; left:0px; width:178px; height:107px;"" xmlns:msntvuxp=""msntvuxp.microsoft.com"">
|
||||||
|
<table class=""wthrTbl"" border=""0"" cellpadding=""1"" cellspacing=""0"">
|
||||||
|
<tr>
|
||||||
|
<td height=""4"" width=""4"" rowspan=""4""><img src=""images/Shared/s.gif"" height=""4"" width=""4""></td>
|
||||||
|
<td height=""4"" width=""45""><img src=""images/Shared/s.gif"" height=""4"" width=""45""></td>
|
||||||
|
<td height=""4"" width=""10""><img src=""images/Shared/s.gif"" height=""4"" width=""10""></td>
|
||||||
|
<td height=""4"" width=""65""><img src=""images/Shared/s.gif"" height=""4"" width=""65""></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id=""CityCellID"" class=""wthrCityCell"" colspan=""3"" valign=""top"">
|
||||||
|
<span class=""wthrCityText"">{@Weather.City}</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id=""TRCID"" class=""wthrTempCond"">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td id=""TemperatureCellID"" class=""wthrTempCell"">
|
||||||
|
<span class=""wthrTempTxt"">{@Weather.Temp}°F</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id=""ConditionCellID"" class=""wthrCondCell"">
|
||||||
|
<span class=""wthrCondTxt"">{Weather?.Description}</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td id=""PaddingID"" width=""10""><img src=""images/Shared/s.gif"" height=""1"" width=""10""></td>
|
||||||
|
<td id=""ConditionIconID"" class=""wthrCondIcon"">
|
||||||
|
<img src=""{@Weather?.Icon}"" alt=""Weather icon"" style=""width:65px;height:61px;"">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id=""ProviderID"" class=""wthrProvider"" colspan=""3"">
|
||||||
|
Open-Meteo
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<script xmlns:msntvuxp=""msntvuxp.microsoft.com"">
|
||||||
|
function clickPageRotatePanel() {{
|
||||||
|
location.href = ""/Pages/weather/yourcity"";
|
||||||
|
}}
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
InitRotator(timerRotatorDiv, 5000, new Array(""/home/MoneyModule.aspx"",""/Pages/weather/WeatherModule""));
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<div ID=""clockID"" class=""clockDiv"">
|
||||||
|
</div>
|
||||||
|
<script>clockID.innerHTML = formClockLink();</script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class=""newsHdlnDiv"">
|
||||||
|
<div class=""newsHdlnTitleDiv""><span class=""newsHdlnTitleText"">Today on TV2</span></div><table style=""top:0px;left:0px;width:365px;height:78px;""><tr><td><a class=""newsHdlnLink"" id=""newsHdlnLinkID1"" href=""{@NewsLink1}"">{NewsTitle1}</a></td></tr><tr><td><a class=""newsHdlnLink"" id=""newsHdlnLinkID2"" href=""{@NewsLink2}"">{NewsTitle2}</a></td></tr><tr><td><a class=""newsHdlnLink"" id=""newsHdlnLinkID3"" href=""{@NewsLink3}"">{NewsTitle3}</a></td></tr></table></td></tr></table><div class=""moreNewsDiv""><table><tr><td><img src=""msntv:/Shared/images/BulletCustom.gif"" height=""14"" width=""7""></td><td><img src=""images/Shared/s.gif"" height=""1"" width=""4""></td><td style=""height:37px""><a id=""moreNewsLinkID"" class=""moreNewsLink"" href=""../pages/TopStories"">More MSN news</a></td></tr></table></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class=""promoPanelDiv"">
|
||||||
|
<div style=""position:absolute; width:355px; height:70px;"">
|
||||||
|
|
||||||
|
<table style=""width:365px;""><td class=""promoHdlnTitle"" style=""color:#1D704C"">Using MSN TV</td><tr>
|
||||||
|
<td class=""promoHdlnCell""><a class=""promoHdlnLink"" id=""promoHdlnLinkID1"" href=""http://msntv.msn.com/pages/usingmsntv/tippage.aspx?id=set15"">Tip: Turn on audible dialing </a></td></tr><tr>
|
||||||
|
<td class=""promoHdlnCell""><a class=""promoHdlnLink"" id=""promoHdlnLinkID2"" href=""http://msntv.msn.com/pages/UsingMSNTV/Article.aspx?id=feature3"">Get better printing results</a></td></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style=""position:absolute; left:161px; top:74px; width:200px;"">
|
||||||
|
<table class=""MoreUsingLinkTable""><tr><td><img src=""msntv:/Shared/Images/BulletCustom.gif"" height=""14"" width=""7""></td><td><img src=""/Images/Shared/s.gif"" height=""1"" width=""4""></td><td>
|
||||||
|
<a id=""MoreUsingLinkID"" class=""MoreNewsLink"" href=""http://headwaiter.trusted.msntv.msn.com/Pages/UsingMSNTV/Main"">Go to Using MSN TV</a>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id=""searchID"" class=""searchDiv"">
|
||||||
|
|
||||||
|
<div class=""searchCenterDiv"">
|
||||||
|
<script>
|
||||||
|
function doSearch(country){{
|
||||||
|
if (searchFormID.searchFieldID.value == """")
|
||||||
|
{{
|
||||||
|
window.location = window.external.SafeGetServiceURL('search::search'); + ""?FORM=WEBTV&cfg=MSTVXML&v=1&c=""+country+""&x=26&y=14"";
|
||||||
|
}}
|
||||||
|
else
|
||||||
|
{{
|
||||||
|
window.location = window.external.SafeGetServiceURL('search::search') + ""?FORM=WEBTV&cfg=MSTVXML&v=1&c=""+country+""&x=26&y=14&q="" + escape(searchFormID.searchFieldID.value);
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div style=""position:absolute; z-index:1; left:0; top:0px; width:100%; height:2px; background-color:#0c7faa;"">
|
||||||
|
<table style="" width:100%; height:2px;"">
|
||||||
|
<tr>
|
||||||
|
<td height=""2"">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<table class=""searchTbl"">
|
||||||
|
<form id=""searchFormID"" action=""javascript:doSearch('US')"">
|
||||||
|
<tr>
|
||||||
|
<td width=""10"">
|
||||||
|
</td><td>
|
||||||
|
<a class=""searchLink"" href=""
|
||||||
|
javascript:doSearch('US');
|
||||||
|
"">Search</a><span class=""searchLabelText""> or type www</span>
|
||||||
|
</td><td></td><td><span class=""searchFieldText""><input id=""searchFieldID"" name=""searchFieldName"" class=""searchField"" type=""text"" size=""28""></span></td><td></td>
|
||||||
|
<td valign=""center""><msntv:custombutton id=""GoButtonID"" onClick=""doSearch('US');"" label=""Go"" /></td></tr></form></table><div style=""position:absolute; left:0; top:33px; width:100%; height:2px; background-color:#1c4373;""><table style="" width:100%; height:2px;""><tr><td height=""2""></td></tr></table></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<div id=""iconNavBarID"" class=""iconNavBar"">
|
||||||
|
<table class=""iconNavBarMasterTbl"">
|
||||||
|
<tr>
|
||||||
|
<td align=""center"" valign=""middle"">
|
||||||
|
<table class=""iconNavBarTbl"">
|
||||||
|
<tr>
|
||||||
|
<td class=""iconNavBarTblFrameCell"">
|
||||||
|
<table class=""ApolloIcons"" xmlns:msntv=""http://tv.msn.com"">
|
||||||
|
<tr height=""70"">
|
||||||
|
<td>
|
||||||
|
<msntv:loopingDIV id=""navbar"" hasInitialFocus=""true"" divWidthPX=""554"" onLoopingDivReady=""handleLoopingDivReady()"" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<script>
|
||||||
|
var nIcons;
|
||||||
|
var ImgURL = new Array();
|
||||||
|
var ImgWidth = new Array();
|
||||||
|
var ImgOverURL = new Array();
|
||||||
|
var URL = new Array();
|
||||||
|
|
||||||
|
function goToFavorites() {{
|
||||||
|
window.open("" "", ""favoritespanel"", ""msntv:panel"");
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToMessenger() {{
|
||||||
|
if (window.external.SafeGetServiceURL('messenger::root') != null && window.external.SafeGetServiceURL('messenger::root') != """") window.open("" "", ""impanel"", ""msntv:panel"");
|
||||||
|
else
|
||||||
|
window.location = ""msntv:/OLTK/IMBlock.html"";
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToMail() {{
|
||||||
|
if (window.external.SafeGetServiceURL('mail::listmail') != null && window.external.SafeGetServiceURL('mail::listmail') != """") window.location = window.external.SafeGetServiceURL('mail::listmail');
|
||||||
|
else
|
||||||
|
window.location = ""msntv:/OLTK/EmailBlock.html"";
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToChat() {{
|
||||||
|
if (window.external.SafeGetServiceURL('chat::home') != null && window.external.SafeGetServiceURL('chat::home') != """") window.location = window.external.SafeGetServiceURL('chat::home');
|
||||||
|
else
|
||||||
|
window.location = ""msntv:/OLTK/chatBlock.html"";
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToSearch() {{
|
||||||
|
window.location = window.external.SafeGetServiceURL('search::main');
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToMaps() {{
|
||||||
|
window.location = window.external.SafeGetServiceURL('maps::main');
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToMusicHome() {{
|
||||||
|
window.location = window.external.SafeGetServiceURL('Music::Home');
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToVideoHome() {{
|
||||||
|
window.location = window.external.SafeGetServiceURL('Video::Home');
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToNetwork() {{
|
||||||
|
window.location = window.external.SafeGetServiceURL('Settings::HomeNetwork');
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToAccount() {{
|
||||||
|
window.location = window.external.SafeGetServiceURL('UAM::UAMbase');
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToSettings() {{
|
||||||
|
window.location = window.external.SafeGetServiceURL('settings::mainindex');
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToCenter(URL) {{
|
||||||
|
window.location = URL;
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToPhotosApp() {{
|
||||||
|
window.location = window.external.SafeGetServiceURL('Photos');
|
||||||
|
}}
|
||||||
|
|
||||||
|
function goToPhotosHome() {{
|
||||||
|
window.location = window.external.SafeGetServiceURL('Photo::Home');
|
||||||
|
}}
|
||||||
|
|
||||||
|
function initIcons() {{
|
||||||
|
for (index = 0; index < nIcons; index++) {{
|
||||||
|
var realIndex = (index + nIcons - 1) % nIcons;
|
||||||
|
var cellHTML = ""<span"" + "" onFocus=\""ImgObjs"" + realIndex + "".src='"" + ImgOverURL[realIndex] + ""'\"""" + "" onBlur=\""ImgObjs"" + realIndex + "".src='"" + ImgURL[realIndex] + ""'\"""";
|
||||||
|
cellHTML += "" onClick=\"""" + URL[realIndex] + ""\"""";
|
||||||
|
cellHTML += "">"" + ""<img"" + "" id='ImgObjs"" + realIndex + ""'"" + "" src='"" + ImgURL[realIndex] + ""' width="" + ImgWidth[realIndex] + "" height=61 border=0>"" + ""</span>"";
|
||||||
|
navbar.AddCellHTML(cellHTML, ImgWidth[realIndex]);
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
|
||||||
|
ImgURL[0] = ""/Images/Home/HomeIconFav.jpg"";
|
||||||
|
ImgOverURL[0] = ""/Images/Home/HomeIconFavOver.jpg"";
|
||||||
|
ImgWidth[0] = 87;
|
||||||
|
URL[0] = ""javascript:goToFavorites();"";
|
||||||
|
|
||||||
|
ImgURL[1] = ""/Images/Home/HomeIconMail.jpg"";
|
||||||
|
ImgOverURL[1] = ""/Images/Home/HomeIconMailOver.jpg"";
|
||||||
|
ImgWidth[1] = 70;
|
||||||
|
URL[1] = ""javascript:goToMail();"";
|
||||||
|
|
||||||
|
ImgURL[2] = ""/Images/Home/HomeIconMsgr.jpg"";
|
||||||
|
ImgOverURL[2] = ""/Images/Home/HomeIconMsgrOver.jpg"";
|
||||||
|
ImgWidth[2] = 99;
|
||||||
|
URL[2] = ""javascript:goToMessenger();"";
|
||||||
|
|
||||||
|
ImgURL[3] = ""/Images/Home/HomeIconMaps.jpg"";
|
||||||
|
ImgOverURL[3] = ""/Images/Home/HomeIconMapsOver.jpg"";
|
||||||
|
ImgWidth[3] = 60;
|
||||||
|
URL[3] = ""javascript:goToMaps();"";
|
||||||
|
|
||||||
|
ImgURL[4] = ""/Images/Home/HomeIconPhoto.jpg"";
|
||||||
|
ImgOverURL[4] = ""/Images/Home/HomeIconPhotoOver.jpg"";
|
||||||
|
ImgWidth[4] = 70;
|
||||||
|
URL[4] = ""javascript:goToPhotosApp();"";
|
||||||
|
|
||||||
|
ImgURL[5] = ""/Images/Home/HomeIconVideos.jpg"";
|
||||||
|
ImgOverURL[5] = ""/Images/Home/HomeIconVideosOver.jpg"";
|
||||||
|
ImgWidth[5] = 70;
|
||||||
|
URL[5] = ""javascript:goToVideoHome();"";
|
||||||
|
|
||||||
|
ImgURL[6] = ""/Images/Home/HomeIconMusic.jpg"";
|
||||||
|
ImgOverURL[6] = ""/Images/Home/HomeIconMusicOver.jpg"";
|
||||||
|
ImgWidth[6] = 66;
|
||||||
|
URL[6] = ""javascript:goToMusicHome();"";
|
||||||
|
|
||||||
|
ImgURL[7] = ""/Images/Home/HomeIconDiscuss.jpg"";
|
||||||
|
ImgOverURL[7] = ""/Images/Home/HomeIconDiscussOver.jpg"";
|
||||||
|
ImgWidth[7] = 72;
|
||||||
|
URL[7] = ""javascript:goToCenter('/Pages/Discuss/Home.aspx');"";
|
||||||
|
|
||||||
|
ImgURL[8] = ""/Images/Home/HomeIconMSNBC.jpg"";
|
||||||
|
ImgOverURL[8] = ""/Images/Home/HomeIconMSNBCOver.jpg"";
|
||||||
|
ImgWidth[8] = 68;
|
||||||
|
URL[8] = ""javascript:goToCenter('/Pages/News/TopStories.aspx');"";
|
||||||
|
|
||||||
|
ImgURL[9] = ""/Images/Home/HomeIconTWC.jpg"";
|
||||||
|
ImgOverURL[9] = ""/Images/Home/HomeIconTWCOver.jpg"";
|
||||||
|
ImgWidth[9] = 81;
|
||||||
|
URL[9] = ""javascript:goToCenter('/Pages/Weather/MyCity.aspx');"";
|
||||||
|
|
||||||
|
ImgURL[10] = ""/Images/Home/HomeIconEnt.jpg"";
|
||||||
|
ImgOverURL[10] = ""/Images/Home/HomeIconEntOver.jpg"";
|
||||||
|
ImgWidth[10] = 125;
|
||||||
|
URL[10] = ""javascript:goToCenter('/Pages/Entertainment/Home.aspx');"";
|
||||||
|
|
||||||
|
ImgURL[11] = ""/Images/Home/HomeIconTVListings.jpg"";
|
||||||
|
ImgOverURL[11] = ""/Images/Home/HomeIconTVListingsOver.jpg"";
|
||||||
|
ImgWidth[11] = 96;
|
||||||
|
URL[11] = ""javascript:goToCenter('http://tv.msn.com/tv/guide');"";
|
||||||
|
|
||||||
|
ImgURL[12] = ""/Images/Home/HomeIconSports.jpg"";
|
||||||
|
ImgOverURL[12] = ""/Images/Home/HomeIconSportsOver.jpg"";
|
||||||
|
ImgWidth[12] = 82;
|
||||||
|
URL[12] = ""javascript:goToCenter('/Pages/Sports/Main.aspx');"";
|
||||||
|
|
||||||
|
ImgURL[13] = ""/Images/Home/HomeIconMoney.jpg"";
|
||||||
|
ImgOverURL[13] = ""/Images/Home/HomeIconMoneyOver.jpg"";
|
||||||
|
ImgWidth[13] = 68;
|
||||||
|
URL[13] = ""javascript:goToCenter('/Pages/Money/Home.aspx');"";
|
||||||
|
|
||||||
|
ImgURL[14] = ""/Images/Home/HomeIconShopping.jpg"";
|
||||||
|
ImgOverURL[14] = ""/Images/Home/HomeIconShoppingOver.jpg"";
|
||||||
|
ImgWidth[14] = 62;
|
||||||
|
URL[14] = ""javascript:goToCenter('/Pages/Shopping/Main.aspx');"";
|
||||||
|
|
||||||
|
ImgURL[15] = ""/Images/Home/HomeIconGames.jpg"";
|
||||||
|
ImgOverURL[15] = ""/Images/Home/HomeIconGamesOver.jpg"";
|
||||||
|
ImgWidth[15] = 70;
|
||||||
|
URL[15] = ""javascript:goToCenter('/Pages/Games/Home.aspx');"";
|
||||||
|
|
||||||
|
ImgURL[16] = ""/Images/Home/HomeIconEncarta.jpg"";
|
||||||
|
ImgOverURL[16] = ""/Images/Home/HomeIconEncartaOver.jpg"";
|
||||||
|
ImgWidth[16] = 74;
|
||||||
|
URL[16] = ""javascript:goToCenter('http://g.msn.com/5TVANDURIL/1505')"";
|
||||||
|
|
||||||
|
ImgURL[17] = ""/Images/Home/HomeIconChat.jpg"";
|
||||||
|
ImgOverURL[17] = ""/Images/Home/HomeIconChatOver.jpg"";
|
||||||
|
ImgWidth[17] = 55;
|
||||||
|
URL[17] = ""javascript:goToChat();"";
|
||||||
|
|
||||||
|
ImgURL[18] = ""/Images/Home/HomeIconUsingMSN.jpg"";
|
||||||
|
ImgOverURL[18] = ""/Images/Home/HomeIconUsingMSNOver.jpg"";
|
||||||
|
ImgWidth[18] = 127;
|
||||||
|
URL[18] = ""javascript:goToCenter('/Pages/UsingMSNTV/Main');"";
|
||||||
|
|
||||||
|
ImgURL[19] = ""/Images/Home/HomeIconTTT.jpg"";
|
||||||
|
ImgOverURL[19] = ""/Images/Home/HomeIconTTTOver.jpg"";
|
||||||
|
ImgWidth[19] = 116;
|
||||||
|
URL[19] = ""javascript:goToCenter('/Pages/UsingMSNTV/ThingstoTry');"";
|
||||||
|
|
||||||
|
ImgURL[20] = ""/Images/Home/HomeIconSearch.jpg"";
|
||||||
|
ImgOverURL[20] = ""/Images/Home/HomeIconSearchOver.jpg"";
|
||||||
|
ImgWidth[20] = 84;
|
||||||
|
URL[20] = ""javascript:goToSearch();"";
|
||||||
|
|
||||||
|
ImgObjs = new Array();
|
||||||
|
ImgOverObjs = new Array();
|
||||||
|
nIcons = ImgURL.length;
|
||||||
|
ImgOverObjs[0] = new Image();
|
||||||
|
ImgOverObjs[0].src = ImgOverURL[0];
|
||||||
|
for (var i = 0; i < nIcons; i++) {{
|
||||||
|
ImgObjs[i] = new Image();
|
||||||
|
ImgObjs[i].src = ImgURL[i];
|
||||||
|
}}
|
||||||
|
for (var i = 1; i < nIcons; i++) {{
|
||||||
|
ImgOverObjs[i] = new Image();
|
||||||
|
ImgOverObjs[i].src = ImgOverURL[i];
|
||||||
|
}}
|
||||||
|
initIcons();
|
||||||
|
</script>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function callCGif()
|
||||||
|
{{
|
||||||
|
var i = new Image();
|
||||||
|
i.src = ""http://c.msn.com/c.gif?DI=1455&PI=68206&PS=45577&TP=http://msntv.msn.com/HomePage.htm&RF="";
|
||||||
|
}}
|
||||||
|
window.attachEvent(""onload"", callCGif);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</body></html>
|
||||||
|
");
|
||||||
|
|
||||||
|
@((MarkupString)htmlContent)
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<PageTitle>Home</PageTitle>
|
||||||
|
<h1>Hello, world!</h1>
|
||||||
|
<footer>
|
||||||
|
<div style="position:fixed; left: 0px; bottom: 20px; width: 100vw;">
|
||||||
|
<TV2PCHomeNavBar />
|
||||||
|
</div>
|
||||||
|
<div style="position:fixed; left: 0px; bottom: 0; width: 100vw; height: 40px;">
|
||||||
|
<table cellpadding="0" cellspacing="0" width="100%" height="100%">
|
||||||
|
<tr>
|
||||||
|
<td width="560">
|
||||||
|
<img src="/Images/TV2PC/StatusBarBG.jpg" style="width: 100vw; height: 40px; object-fit: fill;"/>
|
||||||
|
<img src="/Images/TV2PC/Logo_MSNTVStatusBar.png" alt="Overlay Logo" class="overlay-logo" style="position: absolute; right: 0.1vw; bottom: 5px; max-width: 150%; z-index: 1001;" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
}
|
||||||
|
|
||||||
|
@code {
|
||||||
|
string userAgent { get; set; }
|
||||||
|
bool IsTV2 = false;
|
||||||
|
|
||||||
|
// News
|
||||||
|
string NewsLink1 = "http://sg1.trusted.msntv.msn.com/Pages/Tricks/he.mp3";
|
||||||
|
string NewsLink2 = "http://sg1.trusted.msntv.msn.com/Pages/Tricks/pokemon-black-2.mp3";
|
||||||
|
string NewsLink3 = "http://sg1.trusted.msntv.msn.com/Pages/Tricks/he.mp3";
|
||||||
|
string NewsTitle1 = "Ryder Smells";
|
||||||
|
string NewsTitle2 = "Ryder Smells";
|
||||||
|
string NewsTitle3 = "Ryder Smells";
|
||||||
|
|
||||||
|
// Weather mock
|
||||||
|
WeatherData Weather = new WeatherData
|
||||||
|
{
|
||||||
|
City = "San Jose",
|
||||||
|
Temp = "72",
|
||||||
|
Description = "Sunny",
|
||||||
|
Icon = "/Pages/Home/Weather/26.gif"
|
||||||
|
};
|
||||||
|
|
||||||
|
// Date data
|
||||||
|
DateData date = new DateData();
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
var request = httpContextAccessor.HttpContext?.Request;
|
||||||
|
IsTV2 = request != null && SecurityHandler.IsMsnTvClient(request) && SecurityHandler.IsTrustedDomain(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class WeatherData
|
||||||
|
{
|
||||||
|
public string City { get; set; }
|
||||||
|
public string Temp { get; set; }
|
||||||
|
public string Description { get; set; }
|
||||||
|
public string Icon { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
class DateData
|
||||||
|
{
|
||||||
|
public string date { get; }
|
||||||
|
|
||||||
|
public DateData()
|
||||||
|
{
|
||||||
|
date = DateTime.Now.ToString("dddd, MMMM d");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,127 @@
|
|||||||
|
const minisrv_service_file = true;
|
||||||
|
|
||||||
|
headers = `200 OK
|
||||||
|
Content-type: text/html`;
|
||||||
|
|
||||||
|
data = `<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<script>
|
||||||
|
var forceReload = false;
|
||||||
|
var l = 'd:' + new Date().valueOf() + '|';
|
||||||
|
|
||||||
|
function setCookie(name, value) {
|
||||||
|
var now = new Date();
|
||||||
|
var expires = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate());
|
||||||
|
document.cookie = escape(name) + '=' + escape(value) + ';expires=' + expires.toGMTString() + ';path=/';
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCookie(name) {
|
||||||
|
var str = document.cookie;
|
||||||
|
var arr = str.split('; ');
|
||||||
|
for (var i = arr.length - 1; i >= 0; i--) {
|
||||||
|
var c = arr[i].split('=');
|
||||||
|
if (c.length != 2) continue;
|
||||||
|
if (unescape(c[0]) == name) return unescape(c[1]);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function syncCookie(cookieName, propValue) {
|
||||||
|
var c = getCookie(cookieName);
|
||||||
|
l += 'g:' + cookieName + ':' + c + '|';
|
||||||
|
if (c != propValue) {
|
||||||
|
setCookie(cookieName, propValue);
|
||||||
|
l += 's:' + cookieName + ':' + propValue + '|';
|
||||||
|
var check = getCookie(cookieName);
|
||||||
|
if (check == propValue) forceReload = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var d = new Date();
|
||||||
|
var utcOffset = d.getTimezoneOffset();
|
||||||
|
syncCookie('UserUtcOffset', utcOffset);
|
||||||
|
var connSpeed;
|
||||||
|
try {
|
||||||
|
connSpeed = window.external.ClientCaps.connectionType;
|
||||||
|
} catch (e) {
|
||||||
|
connSpeed = "undetected";
|
||||||
|
}
|
||||||
|
syncCookie('UserConnectionSpeed', connSpeed);
|
||||||
|
try {
|
||||||
|
top.log(l);
|
||||||
|
} catch (e) {}
|
||||||
|
if (forceReload) location.replace(location.href);
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div style="top:0px; left:0px; width:176px; height:105px;">
|
||||||
|
<div class="PNGImage" style="width:176px;height:105px;src:/Images/Home/HomeRotatorBGStock.png;"></div>
|
||||||
|
</div>
|
||||||
|
<table cellpadding="0" cellspacing="0" class="stocksTbl">
|
||||||
|
<tbody>
|
||||||
|
<tr height="8">
|
||||||
|
<td width="7"></td>
|
||||||
|
<td width="75"></td>
|
||||||
|
<td width="5"></td>
|
||||||
|
<td width="14"></td>
|
||||||
|
<td width="7"></td>
|
||||||
|
<td width="65"></td>
|
||||||
|
<td width="5"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td class="stocksCell" style="font-weight:bold; overflow:hidden; text-overflow:ellipsis">Dow</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div class="PNGImage" style="src:/Images/Home/HomeStocksUpArrow.png; width:14px; height:24px"></div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td class="stocksCell" style="text-align: right;">+54.11</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="stocksRule" colspan="7"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td class="stocksCell" style="font-weight:bold; overflow:hidden; text-overflow:ellipsis">Nasdaq</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div class="PNGImage" style="src:/Images/Home/HomeStocksUpArrow.png; width:14px; height:24px"></div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td class="stocksCell" style="text-align: right;">+6.31</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="stocksRule" colspan="7"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td class="stocksCell" style="font-weight:bold; overflow:hidden; text-overflow:ellipsis">S&P</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div class="PNGImage" style="src:/Images/Home/HomeStocksUpArrow.png; width:14px; height:24px"></div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td class="stocksCell" style="text-align: right;">+3.19</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="stocksRule" colspan="7"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="ProviderID" class="wthrProvider" colspan="6">Source: MSN Money</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<!--<ROTATOR_FEEDBACK></ROTATOR_FEEDBACK>--><!--<ROTATOR_CLICKTHROUGH>/Pages/Money/MyStocks.aspx</ROTATOR_CLICKTHROUGH>-->
|
||||||
|
<script>
|
||||||
|
function clickPageRotatePanel() {
|
||||||
|
location.href = "/Pages/Money/MyStocks.aspx";
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>`;
|
||||||
@@ -0,0 +1,164 @@
|
|||||||
|
@page "/Pages/Home/MoneyModule.aspx"
|
||||||
|
@using MSNTV2MainServer.Components.Layout
|
||||||
|
@using Microsoft.AspNetCore.Http
|
||||||
|
@using Microsoft.AspNetCore.Components;
|
||||||
|
@inject IHttpContextAccessor httpContextAccessor
|
||||||
|
|
||||||
|
<!-- Nulled layout as it is defined manually-->
|
||||||
|
@layout EmptyLayout
|
||||||
|
|
||||||
|
|
||||||
|
@if (IsTV2)
|
||||||
|
{
|
||||||
|
MarkupString htmlContent = new MarkupString($@"
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<script>
|
||||||
|
var forceReload = false;
|
||||||
|
var l = 'd:' + new Date().valueOf() + '|';
|
||||||
|
|
||||||
|
function setCookie(name, value) {{
|
||||||
|
var now = new Date();
|
||||||
|
var expires = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate());
|
||||||
|
document.cookie = escape(name) + '=' + escape(value) + ';expires=' + expires.toGMTString() + ';path=/';
|
||||||
|
}}
|
||||||
|
|
||||||
|
function getCookie(name) {{
|
||||||
|
var str = document.cookie;
|
||||||
|
var arr = str.split('; ');
|
||||||
|
for (var i = arr.length - 1; i >= 0; i--) {{
|
||||||
|
var c = arr[i].split('=');
|
||||||
|
if (c.length != 2) continue;
|
||||||
|
if (unescape(c[0]) == name) return unescape(c[1]);
|
||||||
|
}}
|
||||||
|
return null;
|
||||||
|
}}
|
||||||
|
|
||||||
|
function syncCookie(cookieName, propValue) {{
|
||||||
|
var c = getCookie(cookieName);
|
||||||
|
l += 'g:' + cookieName + ':' + c + '|';
|
||||||
|
if (c != propValue) {{
|
||||||
|
setCookie(cookieName, propValue);
|
||||||
|
l += 's:' + cookieName + ':' + propValue + '|';
|
||||||
|
var check = getCookie(cookieName);
|
||||||
|
if (check == propValue) forceReload = true;
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
var d = new Date();
|
||||||
|
var utcOffset = d.getTimezoneOffset();
|
||||||
|
syncCookie('UserUtcOffset', utcOffset);
|
||||||
|
var connSpeed;
|
||||||
|
try {{
|
||||||
|
connSpeed = window.external.ClientCaps.connectionType;
|
||||||
|
}} catch (e) {{
|
||||||
|
connSpeed = ""undetected"";
|
||||||
|
}}
|
||||||
|
syncCookie('UserConnectionSpeed', connSpeed);
|
||||||
|
try {{
|
||||||
|
top.log(l);
|
||||||
|
}} catch (e) {{}}
|
||||||
|
if (forceReload) location.replace(location.href);
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div style=""top:0px; left:0px; width:176px; height:105px;"">
|
||||||
|
<div class=""PNGImage"" style=""width:176px;height:105px;src:/Images/Home/HomeRotatorBGStock.png;""></div>
|
||||||
|
</div>
|
||||||
|
<table cellpadding=""0"" cellspacing=""0"" class=""stocksTbl"">
|
||||||
|
<tbody>
|
||||||
|
<tr height=""8"">
|
||||||
|
<td width=""7""></td>
|
||||||
|
<td width=""75""></td>
|
||||||
|
<td width=""5""></td>
|
||||||
|
<td width=""14""></td>
|
||||||
|
<td width=""7""></td>
|
||||||
|
<td width=""65""></td>
|
||||||
|
<td width=""5""></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td class=""stocksCell"" style=""font-weight:bold; overflow:hidden; text-overflow:ellipsis"">Dow</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div class=""PNGImage"" style=""src:/Images/Home/HomeStocksUpArrow.png; width:14px; height:24px""></div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td class=""stocksCell"" style=""text-align: right;"">+54.11</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class=""stocksRule"" colspan=""7""></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td class=""stocksCell"" style=""font-weight:bold; overflow:hidden; text-overflow:ellipsis"">Nasdaq</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div class=""PNGImage"" style=""src:/Images/Home/HomeStocksUpArrow.png; width:14px; height:24px""></div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td class=""stocksCell"" style=""text-align: right;"">+6.31</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class=""stocksRule"" colspan=""7""></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td class=""stocksCell"" style=""font-weight:bold; overflow:hidden; text-overflow:ellipsis"">S&P</td>
|
||||||
|
<td></td>
|
||||||
|
<td>
|
||||||
|
<div class=""PNGImage"" style=""src:/Images/Home/HomeStocksUpArrow.png; width:14px; height:24px""></div>
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td class=""stocksCell"" style=""text-align: right;"">+3.19</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class=""stocksRule"" colspan=""7""></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id=""ProviderID"" class=""wthrProvider"" colspan=""6"">Source: MSN Money</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<!--<ROTATOR_FEEDBACK></ROTATOR_FEEDBACK>--><!--<ROTATOR_CLICKTHROUGH>/Pages/Money/MyStocks.aspx</ROTATOR_CLICKTHROUGH>-->
|
||||||
|
<script>
|
||||||
|
function clickPageRotatePanel() {{
|
||||||
|
location.href = ""/Pages/Money/MyStocks.aspx"";
|
||||||
|
}}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
");
|
||||||
|
|
||||||
|
@((MarkupString)htmlContent)
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<PageTitle>Home</PageTitle>
|
||||||
|
}
|
||||||
|
|
||||||
|
@code
|
||||||
|
{
|
||||||
|
string userAgent { get; set; }
|
||||||
|
bool IsTV2 = false;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
userAgent = httpContextAccessor.HttpContext.Request.Headers["User-Agent"];
|
||||||
|
|
||||||
|
//Check if the client is an MSNTV2 box. If it is, we should return the TV2 page and not the Blazor based Page.
|
||||||
|
if(userAgent.Contains("MSNTV"))
|
||||||
|
{
|
||||||
|
IsTV2 = true;
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
const minisrv_service_file = true;
|
||||||
|
|
||||||
|
headers = `200 OK
|
||||||
|
Content-type: text/html`;
|
||||||
|
|
||||||
|
data = `<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<script>
|
||||||
|
var forceReload = false;
|
||||||
|
var l = 'd:' + new Date().valueOf() + '|';
|
||||||
|
|
||||||
|
function setCookie(name, value) {
|
||||||
|
var now = new Date();
|
||||||
|
var expires = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate());
|
||||||
|
document.cookie = escape(name) + '=' + escape(value) + ';expires=' + expires.toGMTString() + ';path=/';
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCookie(name) {
|
||||||
|
var str = document.cookie;
|
||||||
|
var arr = str.split('; ');
|
||||||
|
for (var i = arr.length - 1; i >= 0; i--) {
|
||||||
|
var c = arr[i].split('=');
|
||||||
|
if (c.length != 2) continue;
|
||||||
|
if (unescape(c[0]) == name) return unescape(c[1]);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
function syncCookie(cookieName, propValue) {
|
||||||
|
var c = getCookie(cookieName);
|
||||||
|
l += 'g:' + cookieName + ':' + c + '|';
|
||||||
|
if (c != propValue) {
|
||||||
|
setCookie(cookieName, propValue);
|
||||||
|
l += 's:' + cookieName + ':' + propValue + '|';
|
||||||
|
var check = getCookie(cookieName);
|
||||||
|
if (check == propValue) forceReload = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var d = new Date();
|
||||||
|
var utcOffset = d.getTimezoneOffset();
|
||||||
|
syncCookie('UserUtcOffset', utcOffset);
|
||||||
|
var connSpeed;
|
||||||
|
try {
|
||||||
|
connSpeed = window.external.ClientCaps.connectionType;
|
||||||
|
} catch (e) {
|
||||||
|
connSpeed = "undetected";
|
||||||
|
}
|
||||||
|
syncCookie('UserConnectionSpeed', connSpeed);
|
||||||
|
try {
|
||||||
|
top.log(l);
|
||||||
|
} catch (e) {}
|
||||||
|
if (forceReload) location.replace(location.href);
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div style="top:0px; left:0px; width:176px; height:105px;" xmlns:msntvuxp="msntvuxp.microsoft.com">
|
||||||
|
<div class="PNGImage" style="width:176px;height:105px;src:/Images/Home/HomeRotatorBGWeather.png;"></div>
|
||||||
|
</div>
|
||||||
|
<div style="position:absolute; top:0px; left:0px; width:178px; height:107px;" xmlns:msntvuxp="msntvuxp.microsoft.com">
|
||||||
|
<table class="wthrTbl" border="0" cellpadding="1" cellspacing="0">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td height="4" width="4" rowspan="4"><img src="/Images/Shared/s.gif" height="4" width="4"></td>
|
||||||
|
<td height="4" width="45"><img src="/Images/Shared/s.gif" height="4" width="45"></td>
|
||||||
|
<td height="4" width="10"><img src="/Images/Shared/s.gif" height="4" width="10"></td>
|
||||||
|
<td height="4" width="65"><img src="/Images/Shared/s.gif" height="4" width="65"></td>
|
||||||
|
<td height="4" width="10" rowspan="4"><img src="/Images/Shared/s.gif" height="4" width="10"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="CityCellID" class="wthrCityCell" colspan="3" valign="top"><span class="wthrCityText">Your City</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="TRCID" class="wthrTempCond">
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td id="TemperatureCellID" class="wthrTempCell"><span class="wthrTempTxt">63°/50</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="ConditionCellID" class="wthrCondCell"><span class="wthrCondTxt">Mostly</span><br><span class="wthrCondTxt"> Cloudy</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td id="PaddingID" width="10"><img src="/Images/Shared/s.gif" height="1" width="10"></td>
|
||||||
|
<td id="ConditionIconID" class="wthrCondIcon"><span class="PNGImage" style="src:/Images/Shared/Weather/28.png;width:65px;height:61px;"></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id="ProviderID" class="wthrProvider" colspan="3">The Weather Channel ®</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--<ROTATOR_FEEDBACK></ROTATOR_FEEDBACK>--><!--<ROTATOR_CLICKTHROUGH>/Pages/Weather/YourCity.aspx</ROTATOR_CLICKTHROUGH>-->
|
||||||
|
<script xmlns:msntvuxp="msntvuxp.microsoft.com">
|
||||||
|
function clickPageRotatePanel() {
|
||||||
|
location.href = "/Pages/Weather/YourCity.aspx";
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>`;
|
||||||
@@ -0,0 +1,166 @@
|
|||||||
|
@page "/Pages/Home/WeatherModule.aspx"
|
||||||
|
@using MSNTV2MainServer.Components.Layout
|
||||||
|
@using Microsoft.AspNetCore.Http
|
||||||
|
@using Microsoft.AspNetCore.Components;
|
||||||
|
@inject IHttpContextAccessor httpContextAccessor
|
||||||
|
|
||||||
|
<!-- Nulled layout as it is defined manually-->
|
||||||
|
@layout EmptyLayout
|
||||||
|
|
||||||
|
|
||||||
|
@if (IsTV2)
|
||||||
|
{
|
||||||
|
|
||||||
|
MarkupString htmlContent = new MarkupString($@"
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<script>
|
||||||
|
var forceReload = false;
|
||||||
|
var l = 'd:' + new Date().valueOf() + '|';
|
||||||
|
|
||||||
|
function setCookie(name, value) {{
|
||||||
|
var now = new Date();
|
||||||
|
var expires = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate());
|
||||||
|
document.cookie = escape(name) + '=' + escape(value) + ';expires=' + expires.toGMTString() + ';path=/';
|
||||||
|
}}
|
||||||
|
|
||||||
|
function getCookie(name) {{
|
||||||
|
var str = document.cookie;
|
||||||
|
var arr = str.split('; ');
|
||||||
|
for (var i = arr.length - 1; i >= 0; i--) {{
|
||||||
|
var c = arr[i].split('=');
|
||||||
|
if (c.length != 2) continue;
|
||||||
|
if (unescape(c[0]) == name) return unescape(c[1]);
|
||||||
|
}}
|
||||||
|
return null;
|
||||||
|
}}
|
||||||
|
|
||||||
|
function syncCookie(cookieName, propValue) {{
|
||||||
|
var c = getCookie(cookieName);
|
||||||
|
l += 'g:' + cookieName + ':' + c + '|';
|
||||||
|
if (c != propValue) {{
|
||||||
|
setCookie(cookieName, propValue);
|
||||||
|
l += 's:' + cookieName + ':' + propValue + '|';
|
||||||
|
var check = getCookie(cookieName);
|
||||||
|
if (check == propValue) forceReload = true;
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
var d = new Date();
|
||||||
|
var utcOffset = d.getTimezoneOffset();
|
||||||
|
syncCookie('UserUtcOffset', utcOffset);
|
||||||
|
var connSpeed;
|
||||||
|
try {{
|
||||||
|
connSpeed = window.external.ClientCaps.connectionType;
|
||||||
|
}} catch (e) {{
|
||||||
|
connSpeed = ""undetected"";
|
||||||
|
}}
|
||||||
|
syncCookie('UserConnectionSpeed', connSpeed);
|
||||||
|
try {{
|
||||||
|
top.log(l);
|
||||||
|
}} catch (e) {{}}
|
||||||
|
if (forceReload) location.replace(location.href);
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div style=""top:0px; left:0px; width:176px; height:105px;"" xmlns:msntvuxp=""msntvuxp.microsoft.com"">
|
||||||
|
<div class=""PNGImage"" style=""width:176px;height:105px;src:/Images/Home/HomeRotatorBGWeather.png;""></div>
|
||||||
|
</div>
|
||||||
|
<div style=""position:absolute; top:0px; left:0px; width:178px; height:107px;"" xmlns:msntvuxp=""msntvuxp.microsoft.com"">
|
||||||
|
<table class=""wthrTbl"" border=""0"" cellpadding=""1"" cellspacing=""0"">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td height=""4"" width=""4"" rowspan=""4""><img src=""/Images/Shared/s.gif"" height=""4"" width=""4""></td>
|
||||||
|
<td height=""4"" width=""45""><img src=""/Images/Shared/s.gif"" height=""4"" width=""45""></td>
|
||||||
|
<td height=""4"" width=""10""><img src=""/Images/Shared/s.gif"" height=""4"" width=""10""></td>
|
||||||
|
<td height=""4"" width=""65""><img src=""/Images/Shared/s.gif"" height=""4"" width=""65""></td>
|
||||||
|
<td height=""4"" width=""10"" rowspan=""4""><img src=""/Images/Shared/s.gif"" height=""4"" width=""10""></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id=""CityCellID"" class=""wthrCityCell"" colspan=""3"" valign=""top""><span class=""wthrCityText"">Your City</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id=""TRCID"" class=""wthrTempCond"">
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td id=""TemperatureCellID"" class=""wthrTempCell""><span class=""wthrTempTxt"">63°/50</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id=""ConditionCellID"" class=""wthrCondCell""><span class=""wthrCondTxt"">Mostly</span><br><span class=""wthrCondTxt""> Cloudy</span></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td id=""PaddingID"" width=""10""><img src=""/Images/Shared/s.gif"" height=""1"" width=""10""></td>
|
||||||
|
<td id=""ConditionIconID"" class=""wthrCondIcon""><span class=""PNGImage"" style=""src:/Images/Shared/Weather/28.png;width:65px;height:61px;""></span></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td id=""ProviderID"" class=""wthrProvider"" colspan=""3"">The Weather Channel ®</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!--<ROTATOR_FEEDBACK></ROTATOR_FEEDBACK>--><!--<ROTATOR_CLICKTHROUGH>/Pages/Weather/YourCity.aspx</ROTATOR_CLICKTHROUGH>-->
|
||||||
|
<script xmlns:msntvuxp=""msntvuxp.microsoft.com"">
|
||||||
|
function clickPageRotatePanel() {{
|
||||||
|
location.href = ""/Pages/Weather/YourCity.aspx"";
|
||||||
|
}}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
");
|
||||||
|
|
||||||
|
@((MarkupString)htmlContent)
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<PageTitle>Home</PageTitle>
|
||||||
|
|
||||||
|
<h1>Hello, world!</h1>
|
||||||
|
<footer>
|
||||||
|
<div style="position:fixed; left: 0px; bottom: 20px; width: 100vw;">
|
||||||
|
|
||||||
|
<TV2PCHomeNavBar />
|
||||||
|
</div>
|
||||||
|
<div style="position:fixed; left: 0px; bottom: 0; width: 100vw; height: 40px;">
|
||||||
|
<table cellpadding="0" cellspacing="0" width="100%" height="100%">
|
||||||
|
<tr>
|
||||||
|
<td width="560">
|
||||||
|
<img src="/Images/TV2PC/StatusBarBG.jpg" style=" width: 100vw; height: 40px; object-fit: fill;"/>
|
||||||
|
<img src="/Images/TV2PC/Logo_MSNTVStatusBar.png" alt="Overlay Logo" class="overlay-logo" style="position: absolute; right: 0.1vw; bottom: 5px; max-width: 150%; z-index: 1001;" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
}
|
||||||
|
|
||||||
|
@code
|
||||||
|
{
|
||||||
|
string userAgent { get; set; }
|
||||||
|
bool IsTV2 = false;
|
||||||
|
|
||||||
|
string NewsLink1 = "https://google.com";
|
||||||
|
string NewsLink2 = "https://yahoo.com";
|
||||||
|
string NewsLink3 = "https://bing.com";
|
||||||
|
string NewsTitle1 = "Google reigns superior over the universe";
|
||||||
|
string NewsTitle2 = "Who even uses Yahoo anymore?";
|
||||||
|
string NewsTitle3 = "Oh god, it's Bing! (Now with extra piss)";
|
||||||
|
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
userAgent = httpContextAccessor.HttpContext.Request.Headers["User-Agent"];
|
||||||
|
|
||||||
|
//Check if the client is an MSNTV2 box. If it is, we should return the TV2 page and not the Blazor based Page.
|
||||||
|
@if(userAgent.Contains("MSNTV"))
|
||||||
|
{
|
||||||
|
IsTV2 = true;
|
||||||
|
StateHasChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 7.6 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 671 B |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 811 B |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 811 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 352 B |
|
After Width: | Height: | Size: 740 B |
|
After Width: | Height: | Size: 227 B |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 6.8 KiB |
|
After Width: | Height: | Size: 165 B |