Skip to content

Commit a48f7ef

Browse files
committed
Add PlaywrightBrowserFactory and refactor StreamLoginService and StreamManifestResolver for improved app data handling
1 parent 55aa464 commit a48f7ef

2 files changed

Lines changed: 28 additions & 7 deletions

File tree

src/main/java/it/lagioiaproduction/core/StreamLoginService.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.microsoft.playwright.Browser;
44
import com.microsoft.playwright.BrowserContext;
5-
import com.microsoft.playwright.BrowserType;
65
import com.microsoft.playwright.Page;
76
import com.microsoft.playwright.Playwright;
87

@@ -12,7 +11,8 @@
1211
import java.util.function.Consumer;
1312

1413
public class StreamLoginService {
15-
private static final Path AUTH_STATE = Paths.get("playwright", ".auth", "state.json");
14+
private static final Path APP_DATA_DIR = resolveAppDataDir();
15+
private static final Path AUTH_STATE = APP_DATA_DIR.resolve("playwright").resolve(".auth").resolve("state.json");
1616
private static final double LOGIN_TIMEOUT_MS = 300_000;
1717

1818
public boolean hasAuthState() {
@@ -28,17 +28,18 @@ public void loginAndSaveState(Consumer<String> logger) throws Exception {
2828

2929
try (Playwright playwright = Playwright.create();
3030
Browser browser = playwright.chromium().launch(
31-
new BrowserType.LaunchOptions()
31+
new com.microsoft.playwright.BrowserType.LaunchOptions()
32+
.setChannel("msedge")
3233
.setHeadless(false)
3334
.setSlowMo(150)
3435
)) {
3536

3637
BrowserContext context = browser.newContext();
3738
Page page = context.newPage();
3839

39-
log(logger, "Apro il browser per il login Microsoft...");
40+
log(logger, "Apro Microsoft Edge per il login...");
4041
page.navigate("https://login.microsoftonline.com/");
41-
log(logger, "Completa login nel browser.");
42+
log(logger, "Completa login ed eventuale MFA nel browser.");
4243

4344
waitUntilLoginCompleted(page);
4445

@@ -60,4 +61,13 @@ private void log(Consumer<String> logger, String message) {
6061
logger.accept(message);
6162
}
6263
}
64+
65+
private static Path resolveAppDataDir() {
66+
String localAppData = System.getenv("LOCALAPPDATA");
67+
if (localAppData != null && !localAppData.isBlank()) {
68+
return Paths.get(localAppData, "TeamsStreamLectureDownloader");
69+
}
70+
71+
return Paths.get(System.getProperty("user.home"), ".teams-stream-lecture-downloader");
72+
}
6373
}

src/main/java/it/lagioiaproduction/core/StreamManifestResolver.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class StreamManifestResolver {
3333
private static final int MAX_ATTEMPTS = 4;
3434
private static final long[] RETRY_DELAYS_MS = {5_000L, 15_000L, 30_000L, 45_000L};
3535

36-
private static final Path DIAGNOSTICS_DIR = Paths.get("debug", "resolve-failures");
36+
private static final Path DIAGNOSTICS_DIR = resolveAppDataDir().resolve("debug").resolve("resolve-failures");
3737
private static final DateTimeFormatter TS_FORMAT =
3838
DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss-SSS");
3939

@@ -66,7 +66,9 @@ private ResolvedStream resolveOnce(String streamUrl, Path authStatePath, Consume
6666

6767
try (Playwright playwright = Playwright.create();
6868
Browser browser = playwright.chromium().launch(
69-
new BrowserType.LaunchOptions().setHeadless(true)
69+
new BrowserType.LaunchOptions()
70+
.setChannel("msedge")
71+
.setHeadless(true)
7072
)) {
7173

7274
BrowserContext context = browser.newContext(
@@ -257,6 +259,15 @@ private void dumpDiagnostics(Page page, String streamUrl, Consumer<String> logge
257259
}
258260
}
259261

262+
private static Path resolveAppDataDir() {
263+
String localAppData = System.getenv("LOCALAPPDATA");
264+
if (localAppData != null && !localAppData.isBlank()) {
265+
return Paths.get(localAppData, "TeamsStreamLectureDownloader");
266+
}
267+
268+
return Paths.get(System.getProperty("user.home"), ".teams-stream-lecture-downloader");
269+
}
270+
260271
private String safePageUrl(Page page) {
261272
try {
262273
String url = page.url();

0 commit comments

Comments
 (0)