From 8fe9e4bc8738d0b98b50e216f6e198f8079c2fec Mon Sep 17 00:00:00 2001 From: Jonathan Gamble Date: Fri, 12 Jul 2024 12:30:26 -0500 Subject: [PATCH 01/30] recreate debug alerts branch --- ui/bits/src/bits.cropDialog.ts | 2 +- ui/common/css/component/_dialog.scss | 15 ++- ui/common/src/dialog.ts | 169 ++++++++++++++++++--------- ui/site/src/log.ts | 5 +- 4 files changed, 131 insertions(+), 60 deletions(-) diff --git a/ui/bits/src/bits.cropDialog.ts b/ui/bits/src/bits.cropDialog.ts index 7f89eca2a578..1274626fd30a 100644 --- a/ui/bits/src/bits.cropDialog.ts +++ b/ui/bits/src/bits.cropDialog.ts @@ -71,7 +71,7 @@ export async function initModule(o?: CropOpts) { `, append: [{ where: '.crop-view', node: container }], actions: [ - { selector: '.dialog-actions > .cancel', listener: d => d.close() }, + { selector: '.dialog-actions > .cancel', listener: (_, d) => d.close() }, { selector: '.dialog-actions > .submit', listener: crop }, ], onClose: () => { diff --git a/ui/common/css/component/_dialog.scss b/ui/common/css/component/_dialog.scss index a78efd82223e..b36150d3004c 100644 --- a/ui/common/css/component/_dialog.scss +++ b/ui/common/css/component/_dialog.scss @@ -76,9 +76,22 @@ dialog { } } -// top level to reduce specificity, allow easy overrides .dialog-content { text-align: center; padding: 2em; color: $c-font; + + &.alert { + @extend %flex-column; + gap: 2em; + padding: 2em; + width: unset; + height: unset; + + span { + display: flex; + justify-content: end; + gap: 2em; + } + } } diff --git a/ui/common/src/dialog.ts b/ui/common/src/dialog.ts index e240d9830230..31de0a00207d 100644 --- a/ui/common/src/dialog.ts +++ b/ui/common/src/dialog.ts @@ -1,5 +1,6 @@ import { onInsert, looseH as h, VNode, Attrs, LooseVNodes } from './snabbdom'; import { isTouchDevice } from './device'; +import { escapeHtml } from './common'; import * as xhr from './xhr'; import * as licon from './licon'; @@ -12,7 +13,7 @@ export interface Dialog { showModal(): Promise; // resolves on close show(): Promise; // resolves on close - actions(actions?: Action | Action[]): void; // set new or reattach existing actions + updateActions(actions?: Action | Action[]): void; // set new actions, reattach existing if no arg provided close(): void; } @@ -22,7 +23,7 @@ export interface DialogOpts { htmlText?: string; // content, text will be used as-is cash?: Cash; // content, overrides htmlText, will be cloned and any 'none' class removed htmlUrl?: string; // content, overrides htmlText and cash, url will be xhr'd - append?: { node: HTMLElement; where?: string }[]; // if no where selector, appends to view + append?: { node: HTMLElement; where?: string; how?: 'after' | 'before' | 'child' }[]; // default 'child' attrs?: { dialog?: Attrs; view?: Attrs }; // optional attrs for dialog and view div actions?: Action | Action[]; // if present, add listeners to action buttons onClose?: (dialog: Dialog) => void; // called when dialog closes @@ -36,13 +37,13 @@ export interface DomDialogOpts extends DialogOpts { show?: 'modal' | boolean; // if not falsy, auto-show, and if 'modal' remove from dom on close } -//snabDialog automatically shows as 'modal' on redraw unless onInsert callback is supplied +//snabDialog automatically shows as 'modal' unless onInsert callback is supplied export interface SnabDialogOpts extends DialogOpts { vnodes?: LooseVNodes; // content, overrides other content properties - onInsert?: (dialog: Dialog) => void; // if supplied, call show() or showModal() manually + onInsert?: (dialog: Dialog) => void; // if supplied, you must call show() or showModal() manually } -export type ActionListener = (dialog: Dialog, action: Action, e: Event) => void; +export type ActionListener = (e: Event, dialog: Dialog, action: Action) => void; // Actions are managed listeners / results that are easily refreshed on DOM changes // if no event is specified, then 'click' is assumed @@ -50,6 +51,7 @@ export type Action = | { selector: string; event?: string | string[]; listener: ActionListener } | { selector: string; event?: string | string[]; result: string }; +// Safari versions before 15.4 need a polyfill for dialog. this "ready" promise resolves when that's loaded export const ready: Promise = site.load.then(async () => { window.addEventListener('resize', onResize); if (window.HTMLDialogElement) return true; @@ -58,8 +60,39 @@ export const ready: Promise = site.load.then(async () => { return dialogPolyfill !== undefined; }); +// non-blocking window.alert-alike +export async function alert(msg: string): Promise { + await domDialog({ + htmlText: escapeHtml(msg), + class: 'alert', + show: 'modal', + }); +} + +// non-blocking window.confirm-alike +export async function confirm(msg: string): Promise { + return ( + ( + await domDialog({ + htmlText: `
${escapeHtml(msg)}
+ `, + class: 'alert', + noCloseButton: true, + noClickAway: true, + show: 'modal', + actions: [ + { selector: '.yes', result: 'yes' }, + { selector: '.no', result: 'no' }, + ], + }) + ).returnValue === 'yes' + ); +} + +// when opts contains 'show', this promise resolves as show/showModal (on dialog close) so check returnValue +// if not, this promise resolves once assets are loaded and things are fully constructed but not shown export async function domDialog(o: DomDialogOpts): Promise { - const [html] = await assets(o); + const [html] = await loadAssets(o); const dialog = document.createElement('dialog'); for (const [k, v] of Object.entries(o.attrs?.dialog ?? {})) dialog.setAttribute(k, String(v)); @@ -72,7 +105,8 @@ export async function domDialog(o: DomDialogOpts): Promise { dialog.appendChild(anchor); } - const view = $as('
'); + const view = !html && o.append?.length === 1 ? o.append[0].node : document.createElement('div'); + view.classList.add('dialog-content'); if (o.class) view.classList.add(...o.class.split(/[. ]/).filter(x => x)); for (const [k, v] of Object.entries(o.attrs?.view ?? {})) view.setAttribute(k, String(v)); if (html) view.innerHTML = html; @@ -90,9 +124,10 @@ export async function domDialog(o: DomDialogOpts): Promise { return wrapper; } -// snab dialogs are shown by default, to suppress this pass onInsert callback +// snab dialogs without an onInsert callback are shown as modal by default. use onInsert callback to handle +// this yourself export function snabDialog(o: SnabDialogOpts): VNode { - const ass = assets(o); + const ass = loadAssets(o); let dialog: HTMLDialogElement; return h( @@ -139,7 +174,8 @@ export function snabDialog(o: SnabDialogOpts): VNode { class DialogWrapper implements Dialog { private restore?: { focus?: HTMLElement; overflow: string }; private resolve?: (dialog: Dialog) => void; - private eventCleanup: { el: Element; type: string; listener: EventListener }[] = []; + private actionCleanup: { el: Element; type: string; listener: EventListener }[] = []; + private dialogCleanup: { el: Element; type: string; listener: EventListener }[] = []; private observer: MutationObserver = new MutationObserver(list => { for (const m of list) if (m.type === 'childList') @@ -159,28 +195,42 @@ class DialogWrapper implements Dialog { if (dialogPolyfill) dialogPolyfill.registerDialog(dialog); // ios < 15.4 const justThen = Date.now(); - const cancelOnInterval = () => Date.now() - justThen > 200 && this.close('cancel'); - + const cancelOnInterval = (e: PointerEvent) => { + if (Date.now() - justThen < 200) return; + const r = dialog.getBoundingClientRect(); + if (e.clientX < r.left || e.clientX > r.right || e.clientY < r.top || e.clientY > r.bottom) + this.close('cancel'); + }; this.observer.observe(document.body, { childList: true, subtree: true }); view.parentElement?.style.setProperty('---viewport-height', `${window.innerHeight}px`); - view.addEventListener('click', e => e.stopPropagation()); - - dialog.addEventListener('cancel', () => !this.returnValue && (this.returnValue = 'cancel')); - dialog.addEventListener('close', this.onRemove); - dialog.querySelector('.close-button-anchor > .close-button')?.addEventListener('click', cancelOnInterval); - - if (!o.noClickAway) setTimeout(() => dialog.addEventListener('click', cancelOnInterval)); + this.addEventListener(view, 'click', e => e.stopPropagation()); + + this.addEventListener(dialog, 'cancel', () => !this.returnValue && (this.returnValue = 'cancel')); + this.addEventListener(dialog, 'close', this.onRemove); + this.addEventListener(dialog.querySelector('.close-button-anchor > .close-button'), 'click', () => + this.close('cancel'), + ); + + if (!o.noClickAway) + setTimeout(() => { + this.addEventListener(document.body, 'click', cancelOnInterval); + this.addEventListener(dialog, 'click', cancelOnInterval); + }); for (const app of o.append ?? []) { - (app.where ? view.querySelector(app.where) : view)?.appendChild(app.node); + if (app.node === view) break; + const where = (app.where ? view.querySelector(app.where) : view)!; + if (app.how === 'before') where.before(app.node); + else if (app.how === 'after') where.after(app.node); + else where.appendChild(app.node); } - this.actions(); + this.updateActions(); } - get open() { + get open(): boolean { return this.dialog.open; } - get returnValue() { + get returnValue(): string { return this.dialog.returnValue; } @@ -188,27 +238,6 @@ class DialogWrapper implements Dialog { this.dialog.returnValue = v; } - // attach/reattach existing listeners or provide a set of new ones - actions = (actions = this.o.actions) => { - for (const { el, type, listener } of this.eventCleanup) { - el.removeEventListener(type, listener); - } - this.eventCleanup = []; - if (!actions) return; - for (const a of Array.isArray(actions) ? actions : [actions]) { - for (const event of Array.isArray(a.event) ? a.event : a.event ? [a.event] : ['click']) { - for (const el of this.view.querySelectorAll(a.selector)) { - const listener = (e: Event) => { - if ('listener' in a) a.listener(this, a, e); - else this.close(a.result); - }; - this.eventCleanup.push({ el, type: event, listener }); - el.addEventListener(event, listener); - } - } - } - }; - show = (): Promise => { this.restore = { overflow: document.body.style.overflow, @@ -224,12 +253,11 @@ class DialogWrapper implements Dialog { focus: document.activeElement as HTMLElement, overflow: document.body.style.overflow, }; + (this.view.querySelectorAll(focusQuery)[1] as HTMLElement)?.focus(); - $(focusQuery, this.view)[1]?.focus(); - document.body.style.overflow = 'hidden'; - + this.addEventListener(this.dialog, 'keydown', onModalKeydown); this.view.scrollTop = 0; - this.dialog.addEventListener('keydown', onModalKeydown); + document.body.style.overflow = 'hidden'; this.returnValue = ''; this.dialog.showModal(); return new Promise(resolve => (this.resolve = resolve)); @@ -239,6 +267,31 @@ class DialogWrapper implements Dialog { this.dialog.close(this.returnValue || v || 'ok'); }; + // attach/reattach existing listeners or provide a set of new ones + updateActions = (actions = this.o.actions) => { + for (const { el, type, listener } of this.actionCleanup) { + el.removeEventListener(type, listener); + } + this.actionCleanup = []; + if (!actions) return; + for (const a of Array.isArray(actions) ? actions : [actions]) { + for (const event of Array.isArray(a.event) ? a.event : a.event ? [a.event] : ['click']) { + for (const el of this.view.querySelectorAll(a.selector)) { + const listener = + 'listener' in a ? (e: Event) => a.listener(e, this, a) : () => this.close(a.result); + this.actionCleanup.push({ el, type: event, listener }); + el.addEventListener(event, listener); + } + } + } + }; + + private addEventListener = (el: Element | null, type: string, listener: EventListener) => { + if (!el) return; + this.dialogCleanup.push({ el, type, listener }); + el.addEventListener(type, listener); + }; + private onRemove = () => { this.observer.disconnect(); if (!this.dialog.returnValue) this.dialog.returnValue = 'cancel'; @@ -248,24 +301,26 @@ class DialogWrapper implements Dialog { this.resolve?.(this); this.o.onClose?.(this); this.dialog.remove(); - for (const css of this.o.css ?? []) - 'hashed' in css && site.asset.removeCssPath(css.hashed), 'url' in css && site.asset.removeCss(css.url); + for (const css of this.o.css ?? []) { + if ('hashed' in css) site.asset.removeCssPath(css.hashed); + else if ('url' in css) site.asset.removeCss(css.url); + } + for (const { el, type, listener } of this.dialogCleanup) { + el.removeEventListener(type, listener); + } }; } -function assets(o: DialogOpts) { - const cssPromises = (o.css ?? []).map(css => { - if ('hashed' in css) return site.asset.loadCssPath(css.hashed); - else if ('url' in css) return site.asset.loadCss(css.url); - else return Promise.resolve(); - }); +function loadAssets(o: DialogOpts) { return Promise.all([ o.htmlUrl ? xhr.text(o.htmlUrl) : Promise.resolve( o.cash ? $as($(o.cash).clone().removeClass('none')).outerHTML : o.htmlText, ), - ...cssPromises, + ...(o.css ?? []).map(css => + 'hashed' in css ? site.asset.loadCssPath(css.hashed) : site.asset.loadCss(css.url), + ), ]); } diff --git a/ui/site/src/log.ts b/ui/site/src/log.ts index 933060ff3ec8..f0d74a9d3e81 100644 --- a/ui/site/src/log.ts +++ b/ui/site/src/log.ts @@ -1,4 +1,5 @@ import { objectStorage, ObjectStorage, DbInfo } from 'common/objectStorage'; +import { alert } from 'common/dialog'; const dbInfo: DbInfo = { db: 'log--db', @@ -74,15 +75,17 @@ export default function makeLog(): LichessLog { }; function terseHref(): string { - return window.location.href.replace(/^(https:\/\/)?lichess\.org\//, '/'); + return window.location.href.replace(/^(https:\/\/)?lichess(?:1?)\.org\//, '/'); } window.addEventListener('error', async e => { const loc = e.filename ? ` - (${e.filename}:${e.lineno}:${e.colno})` : ''; log(`${terseHref()} - ${e.message}${loc}\n${e.error?.stack ?? ''}`.trim()); + if (site.debug) alert(`${e.message}${loc}\n${e.error?.stack ?? ''}`); }); window.addEventListener('unhandledrejection', async e => { log(`${terseHref()} - ${e.reason}`); + if (site.debug) alert(`${e.reason}`); }); return log; From 61263bbb670261cf96e75fa348abe77bf331add8 Mon Sep 17 00:00:00 2001 From: Jonathan Gamble Date: Fri, 12 Jul 2024 12:53:45 -0500 Subject: [PATCH 02/30] its ok to fetch lobby hacks without preloading --- app/views/base/page.scala | 3 +-- ui/bits/package.json | 1 + ui/bits/src/bits.devMode.ts | 22 ++++++++++++++++++++++ ui/site/package.json | 3 +-- ui/site/src/boot.ts | 1 + ui/site/src/site.devMode.ts | 22 ---------------------- 6 files changed, 26 insertions(+), 26 deletions(-) create mode 100644 ui/bits/src/bits.devMode.ts delete mode 100644 ui/site/src/site.devMode.ts diff --git a/app/views/base/page.scala b/app/views/base/page.scala index 8aca1fa45f02..c0b07307c867 100644 --- a/app/views/base/page.scala +++ b/app/views/base/page.scala @@ -91,8 +91,7 @@ object page: manifests, p.withHrefLangs.map(hrefLangs), sitePreload( - p.modules ++ p.pageModule.so(module => jsPageModule(module.name)) ++ - Option.when(!netConfig.isProd)(Option(jsPageModule("site.devMode"))), + p.modules ++ p.pageModule.so(module => jsPageModule(module.name)), isInquiry = ctx.data.inquiry.isDefined ), lichessFontFaceCss, diff --git a/ui/bits/package.json b/ui/bits/package.json index 4dfd6503ed72..eb451c230115 100644 --- a/ui/bits/package.json +++ b/ui/bits/package.json @@ -55,6 +55,7 @@ "src/bits.contact.ts", "src/bits.cropDialog.ts", "src/bits.dailyFeed.ts", + "src/bits.devMode.ts", "src/bits.diagnosticDialog.ts", "src/bits.eventCountdown.ts", "src/bits.expandText.ts", diff --git a/ui/bits/src/bits.devMode.ts b/ui/bits/src/bits.devMode.ts new file mode 100644 index 000000000000..6083ec6d5dce --- /dev/null +++ b/ui/bits/src/bits.devMode.ts @@ -0,0 +1,22 @@ +import { init as initBoard } from 'common/miniBoard'; + +export function initModule() { + $('main.lobby').each(function (this: HTMLElement) { + // fake tv for debugging layout, ui/build with -d flag + if (this.querySelector('.lobby__tv')) return; + + const ds = document.body.dataset; + const tv = $as( + ` + `.trim(), + ); + initBoard(tv.querySelector('#fake-tv')!); + this.append(tv); + }); +} diff --git a/ui/site/package.json b/ui/site/package.json index 02a8cb0aa763..a7813d0ae36d 100644 --- a/ui/site/package.json +++ b/ui/site/package.json @@ -19,8 +19,7 @@ "src/site.ts", "src/site.tvEmbed.ts", "src/site.puzzleEmbed.ts", - "src/site.lpvEmbed.ts", - "src/site.devMode.ts" + "src/site.lpvEmbed.ts" ], "sync": { "node_modules/dialog-polyfill/dist/dialog-polyfill.esm.js": "public/npm" diff --git a/ui/site/src/boot.ts b/ui/site/src/boot.ts index b71e5d5c2321..5b4ec763f49d 100644 --- a/ui/site/src/boot.ts +++ b/ui/site/src/boot.ts @@ -124,6 +124,7 @@ export function boot() { if (setBlind && !site.blindMode) setTimeout(() => $('#blind-mode button').trigger('click'), 1500); + if (site.debug) site.asset.loadEsm('bits.devMode'); if (showDebug) site.asset.loadEsm('bits.diagnosticDialog'); const pageAnnounce = document.body.getAttribute('data-announce'); diff --git a/ui/site/src/site.devMode.ts b/ui/site/src/site.devMode.ts deleted file mode 100644 index 1b658fbf3734..000000000000 --- a/ui/site/src/site.devMode.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { init as initBoard } from 'common/miniBoard'; - -requestAnimationFrame(() => { - $('main.lobby').each(function (this: HTMLElement) { - // fake tv for debugging layout, ui/build with -d flag - if (site.debug && !this.querySelector('.lobby__tv')) { - const ds = document.body.dataset; - const tv = $as( - ` - `.trim(), - ); - initBoard(tv.querySelector('#fake-tv')!); - this.append(tv); - } - }); -}); From 1c0f3950969acd8a35e7459af1597efe4ce7438a Mon Sep 17 00:00:00 2001 From: Jonathan Gamble <101470903+schlawg@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:52:12 -0500 Subject: [PATCH 03/30] improve regex --- ui/site/src/log.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/site/src/log.ts b/ui/site/src/log.ts index f0d74a9d3e81..683fe0c4d260 100644 --- a/ui/site/src/log.ts +++ b/ui/site/src/log.ts @@ -75,7 +75,7 @@ export default function makeLog(): LichessLog { }; function terseHref(): string { - return window.location.href.replace(/^(https:\/\/)?lichess(?:1?)\.org\//, '/'); + return window.location.href.replace(/^(https:\/\/)?(?:lichess|lichess1)\.org\//, '/'); } window.addEventListener('error', async e => { From 8601b1fde8f3df2019eb59a0bb1978930f70dd73 Mon Sep 17 00:00:00 2001 From: Jonathan Gamble <101470903+schlawg@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:08:25 -0500 Subject: [PATCH 04/30] isolatedDeclarations nag --- ui/.build/src/tsc.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ui/.build/src/tsc.ts b/ui/.build/src/tsc.ts index 7e7edbbd946a..80f4f4a7b9e0 100644 --- a/ui/.build/src/tsc.ts +++ b/ui/.build/src/tsc.ts @@ -31,11 +31,15 @@ export async function tsc(): Promise { for (const dep of env.deps.get(module) ?? []) { if (!ref.references?.some((x: any) => x.path.endsWith(path.join(dep, 'tsconfig.json')))) env.warn( - `${warnMark} - Module '${c.grey(module)}' depends on '${c.grey( - dep, - )}' but no reference in '${c.cyan(tsconfig.path.slice(env.uiDir.length + 1))}'`, + `${warnMark} - Module ${c.grey(module)} depends on ${c.grey(dep)} with no reference in '${c.cyan( + module + '/tsconfig.json', + )}'`, + 'tsc', ); } + const o = ref.compilerOptions ?? {}; + if (!o.isolatedDeclarations && (o.composite || o.declaration || o.emitDeclarationOnly)) + env.log(`[${c.grey(module)}] - Convert to ${c.yellow('isolatedDeclarations')}`, { ctx: 'tsc' }); } await fs.promises.writeFile(cfgPath, JSON.stringify(cfg)); From e1f7b860d99471ffabaec6f9d6f08cc2d4956f85 Mon Sep 17 00:00:00 2001 From: Jonathan Gamble <101470903+schlawg@users.noreply.github.com> Date: Fri, 12 Jul 2024 15:13:38 -0500 Subject: [PATCH 05/30] reduce scope of isolatedDeclarations nag somewhat --- ui/.build/src/tsc.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/.build/src/tsc.ts b/ui/.build/src/tsc.ts index 80f4f4a7b9e0..9d28dc0d6963 100644 --- a/ui/.build/src/tsc.ts +++ b/ui/.build/src/tsc.ts @@ -38,7 +38,7 @@ export async function tsc(): Promise { ); } const o = ref.compilerOptions ?? {}; - if (!o.isolatedDeclarations && (o.composite || o.declaration || o.emitDeclarationOnly)) + if (!o.isolatedDeclarations && !o.noEmit && (o.composite || o.declaration || o.emitDeclarationOnly)) env.log(`[${c.grey(module)}] - Convert to ${c.yellow('isolatedDeclarations')}`, { ctx: 'tsc' }); } From 29c9b8dc4140ea803880cdc22fe4314197b9c3c1 Mon Sep 17 00:00:00 2001 From: Jonathan Gamble Date: Fri, 12 Jul 2024 16:53:20 -0500 Subject: [PATCH 06/30] isolatedModules is in tsconfig.base.json, no need for it (in the wrong place) in every module --- ui/.build/src/tsc.ts | 15 +++++++++++---- ui/analyse/tsconfig.json | 3 +-- ui/bits/tsconfig.json | 1 - ui/board/tsconfig.json | 3 +-- ui/ceval/tsconfig.json | 3 +-- ui/challenge/tsconfig.json | 7 ++++--- ui/chart/tsconfig.json | 3 +-- ui/chat/tsconfig.json | 3 +-- ui/chess/tsconfig.json | 3 +-- ui/cli/tsconfig.json | 7 ++++--- ui/coordinateTrainer/tsconfig.json | 3 +-- ui/dasher/tsconfig.json | 3 +-- ui/dgt/tsconfig.json | 3 +-- ui/editor/tsconfig.json | 3 +-- ui/game/tsconfig.json | 2 +- ui/insight/tsconfig.json | 2 +- ui/keyboardMove/tsconfig.json | 2 +- ui/learn/tsconfig.json | 3 +-- ui/lobby/tsconfig.json | 2 +- ui/mod/tsconfig.json | 2 +- ui/notify/tsconfig.json | 2 +- ui/nvui/tsconfig.json | 2 +- ui/opening/tsconfig.json | 2 +- ui/palantir/tsconfig.json | 2 +- ui/puz/tsconfig.json | 2 +- ui/puzzle/tsconfig.json | 2 +- ui/racer/tsconfig.json | 2 +- ui/round/tsconfig.json | 2 +- ui/serviceWorker/tsconfig.json | 3 +-- ui/simul/tsconfig.json | 2 +- ui/site/tsconfig.json | 1 - ui/storm/tsconfig.json | 2 +- ui/swiss/tsconfig.json | 2 +- ui/tournament/tsconfig.json | 2 +- ui/tree/tsconfig.json | 2 +- ui/tutor/tsconfig.json | 2 +- ui/voice/tsconfig.json | 2 +- 37 files changed, 51 insertions(+), 56 deletions(-) diff --git a/ui/.build/src/tsc.ts b/ui/.build/src/tsc.ts index 9d28dc0d6963..df0902a476ac 100644 --- a/ui/.build/src/tsc.ts +++ b/ui/.build/src/tsc.ts @@ -21,7 +21,8 @@ export async function tsc(): Promise { .filter(x => x.hasTsconfig) .sort((a, b) => a.name.localeCompare(b.name)) .map(x => ({ path: path.join(x.root, 'tsconfig.json') })); - + const notIsolated: string[] = []; + const declModules = new Set(); // verify that tsconfig references are correct for (const tsconfig of cfg.references) { if (!tsconfig?.path) continue; @@ -37,10 +38,16 @@ export async function tsc(): Promise { 'tsc', ); } - const o = ref.compilerOptions ?? {}; - if (!o.isolatedDeclarations && !o.noEmit && (o.composite || o.declaration || o.emitDeclarationOnly)) - env.log(`[${c.grey(module)}] - Convert to ${c.yellow('isolatedDeclarations')}`, { ctx: 'tsc' }); + if (!ref.compilerOptions?.isolatedDeclarations) notIsolated.push(module); + ref.references?.forEach((x: any) => declModules.add(/\/([^/]+)\/tsconfig\.json/.exec(x.path)![1])); } + notIsolated + .filter(m => declModules.has(m)) + .forEach(module => + env.log(`[${c.grey(module)}] - Convert to ${c.blue('isolatedDeclarations')} (typescript 5.5)`, { + ctx: 'tsc', + }), + ); await fs.promises.writeFile(cfgPath, JSON.stringify(cfg)); const thisPs = (tscPs = cps.spawn('.build/node_modules/.bin/tsc', [ diff --git a/ui/analyse/tsconfig.json b/ui/analyse/tsconfig.json index 8def919153a8..020b79dc6371 100644 --- a/ui/analyse/tsconfig.json +++ b/ui/analyse/tsconfig.json @@ -14,6 +14,5 @@ { "path": "../keyboardMove/tsconfig.json" }, { "path": "../nvui/tsconfig.json" }, { "path": "../tree/tsconfig.json" } - ], - "isolatedModules": true + ] } diff --git a/ui/bits/tsconfig.json b/ui/bits/tsconfig.json index a3a6b637918c..85cdc1ad1413 100644 --- a/ui/bits/tsconfig.json +++ b/ui/bits/tsconfig.json @@ -9,7 +9,6 @@ "declaration": true, "allowJs": true }, - "isolatedModules": true, "references": [ { "path": "../chat/tsconfig.json" }, { "path": "../chess/tsconfig.json" }, diff --git a/ui/board/tsconfig.json b/ui/board/tsconfig.json index 6bc94fc88d77..0fbe7d839da5 100644 --- a/ui/board/tsconfig.json +++ b/ui/board/tsconfig.json @@ -6,6 +6,5 @@ "rootDir": "src", "composite": true }, - "references": [{ "path": "../common/tsconfig.json" }], - "isolatedModules": true + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/ceval/tsconfig.json b/ui/ceval/tsconfig.json index 3252152f0eab..c13e3e41a2d2 100644 --- a/ui/ceval/tsconfig.json +++ b/ui/ceval/tsconfig.json @@ -7,6 +7,5 @@ "types": ["lichess", "web"], "composite": true }, - "references": [{ "path": "../common/tsconfig.json" }], - "isolatedModules": true + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/challenge/tsconfig.json b/ui/challenge/tsconfig.json index 685c8727bf63..9f87c5ba92d8 100644 --- a/ui/challenge/tsconfig.json +++ b/ui/challenge/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../tsconfig.base.json", - "compilerOptions": { "noEmit": true }, - "references": [{ "path": "../common/tsconfig.json" }], - "isolatedModules": true + "compilerOptions": { + "noEmit": true + }, + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/chart/tsconfig.json b/ui/chart/tsconfig.json index 26eb64508ceb..e739958e44de 100644 --- a/ui/chart/tsconfig.json +++ b/ui/chart/tsconfig.json @@ -8,6 +8,5 @@ "declaration": true, "composite": true }, - "references": [{ "path": "../common/tsconfig.json" }, { "path": "../ceval/tsconfig.json" }], - "isolatedModules": true + "references": [{ "path": "../common/tsconfig.json" }, { "path": "../ceval/tsconfig.json" }] } diff --git a/ui/chat/tsconfig.json b/ui/chat/tsconfig.json index 4994a7573b7e..3c84df4251da 100644 --- a/ui/chat/tsconfig.json +++ b/ui/chat/tsconfig.json @@ -9,6 +9,5 @@ "inlineSourceMap": true, "composite": true }, - "references": [{ "path": "../common/tsconfig.json" }, { "path": "../palantir/tsconfig.json" }], - "isolatedModules": true + "references": [{ "path": "../common/tsconfig.json" }, { "path": "../palantir/tsconfig.json" }] } diff --git a/ui/chess/tsconfig.json b/ui/chess/tsconfig.json index f4e6ab3aad17..0db9c69c41f0 100644 --- a/ui/chess/tsconfig.json +++ b/ui/chess/tsconfig.json @@ -5,8 +5,7 @@ "outDir": "./dist", "rootDir": "src", "composite": true, - "isolatedDeclarations": true, - "isolatedModules": true + "isolatedDeclarations": true }, "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/cli/tsconfig.json b/ui/cli/tsconfig.json index 75d1d7da035e..b5e22cfbb772 100644 --- a/ui/cli/tsconfig.json +++ b/ui/cli/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../tsconfig.base.json", - "compilerOptions": { "noEmit": true }, - "references": [{ "path": "../common/tsconfig.json" }, { "path": "../dasher/tsconfig.json" }], - "isolatedModules": true + "compilerOptions": { + "noEmit": true + }, + "references": [{ "path": "../common/tsconfig.json" }, { "path": "../dasher/tsconfig.json" }] } diff --git a/ui/coordinateTrainer/tsconfig.json b/ui/coordinateTrainer/tsconfig.json index 53c962da6ba6..96bfaa865ec9 100644 --- a/ui/coordinateTrainer/tsconfig.json +++ b/ui/coordinateTrainer/tsconfig.json @@ -4,6 +4,5 @@ "types": ["lichess", "web"], "noEmit": true }, - "references": [{ "path": "../common/tsconfig.json" }, { "path": "../voice/tsconfig.json" }], - "isolatedModules": true + "references": [{ "path": "../common/tsconfig.json" }, { "path": "../voice/tsconfig.json" }] } diff --git a/ui/dasher/tsconfig.json b/ui/dasher/tsconfig.json index 44c0b390a1cc..81c2de4754ad 100644 --- a/ui/dasher/tsconfig.json +++ b/ui/dasher/tsconfig.json @@ -7,6 +7,5 @@ "declaration": true, "composite": true }, - "references": [{ "path": "../common/tsconfig.json" }], - "isolatedModules": true + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/dgt/tsconfig.json b/ui/dgt/tsconfig.json index 610cca015917..5d59d2ee0848 100644 --- a/ui/dgt/tsconfig.json +++ b/ui/dgt/tsconfig.json @@ -3,6 +3,5 @@ "compilerOptions": { "noImplicitAny": false, "noEmit": true - }, - "isolatedModules": true + } } diff --git a/ui/editor/tsconfig.json b/ui/editor/tsconfig.json index 685c8727bf63..cb59ff10d9b2 100644 --- a/ui/editor/tsconfig.json +++ b/ui/editor/tsconfig.json @@ -1,6 +1,5 @@ { "extends": "../tsconfig.base.json", "compilerOptions": { "noEmit": true }, - "references": [{ "path": "../common/tsconfig.json" }], - "isolatedModules": true + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/game/tsconfig.json b/ui/game/tsconfig.json index 4c7c4bac16fc..f1b4205b70ad 100644 --- a/ui/game/tsconfig.json +++ b/ui/game/tsconfig.json @@ -6,6 +6,6 @@ "rootDir": "src", "composite": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/insight/tsconfig.json b/ui/insight/tsconfig.json index 9553c127023e..7cf4e5c4f662 100644 --- a/ui/insight/tsconfig.json +++ b/ui/insight/tsconfig.json @@ -6,6 +6,6 @@ "noEmit": true, "composite": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }, { "path": "../chart/tsconfig.json" }] } diff --git a/ui/keyboardMove/tsconfig.json b/ui/keyboardMove/tsconfig.json index c9918c205742..3f62764a3250 100644 --- a/ui/keyboardMove/tsconfig.json +++ b/ui/keyboardMove/tsconfig.json @@ -8,7 +8,7 @@ "declaration": true, "composite": true }, - "isolatedModules": true, + "references": [ { "path": "../common/tsconfig.json" }, { "path": "../chess/tsconfig.json" }, diff --git a/ui/learn/tsconfig.json b/ui/learn/tsconfig.json index fda21eb5266d..19e14021d4c8 100644 --- a/ui/learn/tsconfig.json +++ b/ui/learn/tsconfig.json @@ -6,6 +6,5 @@ "skipLibCheck": true, "noEmit": true }, - "references": [{ "path": "../common/tsconfig.json" }], - "isolatedModules": true + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/lobby/tsconfig.json b/ui/lobby/tsconfig.json index c78b63b2f280..76d3f4da6afb 100644 --- a/ui/lobby/tsconfig.json +++ b/ui/lobby/tsconfig.json @@ -4,6 +4,6 @@ "esModuleInterop": true, "noEmit": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }, { "path": "../dasher/tsconfig.json" }] } diff --git a/ui/mod/tsconfig.json b/ui/mod/tsconfig.json index 07ae35eb7bdd..e3a23f7568cc 100644 --- a/ui/mod/tsconfig.json +++ b/ui/mod/tsconfig.json @@ -5,6 +5,6 @@ "types": ["lichess", "web"], "noEmit": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/notify/tsconfig.json b/ui/notify/tsconfig.json index 94054ae696c9..f0caf8cdcf52 100644 --- a/ui/notify/tsconfig.json +++ b/ui/notify/tsconfig.json @@ -1,6 +1,6 @@ { "extends": "../tsconfig.base.json", "compilerOptions": { "noEmit": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/nvui/tsconfig.json b/ui/nvui/tsconfig.json index 1fdd03459ad0..2f09133569fd 100644 --- a/ui/nvui/tsconfig.json +++ b/ui/nvui/tsconfig.json @@ -7,6 +7,6 @@ "types": ["lichess", "web"], "composite": true }, - "isolatedModules": true, + "references": [{ "path": "../chess/tsconfig.json" }, { "path": "../common/tsconfig.json" }] } diff --git a/ui/opening/tsconfig.json b/ui/opening/tsconfig.json index 07ae35eb7bdd..e3a23f7568cc 100644 --- a/ui/opening/tsconfig.json +++ b/ui/opening/tsconfig.json @@ -5,6 +5,6 @@ "types": ["lichess", "web"], "noEmit": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/palantir/tsconfig.json b/ui/palantir/tsconfig.json index 7b4889584300..c0345e9f4f46 100644 --- a/ui/palantir/tsconfig.json +++ b/ui/palantir/tsconfig.json @@ -8,6 +8,6 @@ "declaration": true, "composite": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/puz/tsconfig.json b/ui/puz/tsconfig.json index 4c7c4bac16fc..f1b4205b70ad 100644 --- a/ui/puz/tsconfig.json +++ b/ui/puz/tsconfig.json @@ -6,6 +6,6 @@ "rootDir": "src", "composite": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/puzzle/tsconfig.json b/ui/puzzle/tsconfig.json index b5f998f2165e..853ba78a2d86 100644 --- a/ui/puzzle/tsconfig.json +++ b/ui/puzzle/tsconfig.json @@ -4,7 +4,7 @@ "types": ["lichess", "web"], "noEmit": true }, - "isolatedModules": true, + "references": [ { "path": "../board/tsconfig.json" }, { "path": "../ceval/tsconfig.json" }, diff --git a/ui/racer/tsconfig.json b/ui/racer/tsconfig.json index 5b4f2464bb11..cb3a993c4b12 100644 --- a/ui/racer/tsconfig.json +++ b/ui/racer/tsconfig.json @@ -4,7 +4,7 @@ "types": ["lichess", "web"], "noEmit": true }, - "isolatedModules": true, + "references": [ { "path": "../chess/tsconfig.json" }, { "path": "../common/tsconfig.json" }, diff --git a/ui/round/tsconfig.json b/ui/round/tsconfig.json index 0bc4209dc7d9..f73bc596e083 100644 --- a/ui/round/tsconfig.json +++ b/ui/round/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.base.json", "compilerOptions": { "noEmit": true }, - "isolatedModules": true, + "references": [ { "path": "../board/tsconfig.json" }, { "path": "../chat/tsconfig.json" }, diff --git a/ui/serviceWorker/tsconfig.json b/ui/serviceWorker/tsconfig.json index d3d9654e0af8..9daa2e7396ab 100644 --- a/ui/serviceWorker/tsconfig.json +++ b/ui/serviceWorker/tsconfig.json @@ -4,6 +4,5 @@ "lib": ["ES2017"], "types": ["types-serviceworker"], "noEmit": true - }, - "isolatedModules": true + } } diff --git a/ui/simul/tsconfig.json b/ui/simul/tsconfig.json index 20e75eaedd4b..15a4d16df5f0 100644 --- a/ui/simul/tsconfig.json +++ b/ui/simul/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.base.json", "compilerOptions": { "noEmit": true }, - "isolatedModules": true, + "references": [ { "path": "../chat/tsconfig.json" }, { "path": "../common/tsconfig.json" }, diff --git a/ui/site/tsconfig.json b/ui/site/tsconfig.json index 48f8420770cf..f65421a201ac 100644 --- a/ui/site/tsconfig.json +++ b/ui/site/tsconfig.json @@ -7,7 +7,6 @@ "composite": true, "allowJs": true }, - "isolatedModules": true, "references": [ { "path": "../chat/tsconfig.json" }, { "path": "../chess/tsconfig.json" }, diff --git a/ui/storm/tsconfig.json b/ui/storm/tsconfig.json index 7844f162a77b..02d3b3e670b5 100644 --- a/ui/storm/tsconfig.json +++ b/ui/storm/tsconfig.json @@ -4,7 +4,7 @@ "types": ["lichess", "web"], "noEmit": true }, - "isolatedModules": true, + "references": [ { "path": "../common/tsconfig.json" }, { "path": "../chess/tsconfig.json" }, diff --git a/ui/swiss/tsconfig.json b/ui/swiss/tsconfig.json index b474bd9455ba..ee8f94c87750 100644 --- a/ui/swiss/tsconfig.json +++ b/ui/swiss/tsconfig.json @@ -4,7 +4,7 @@ "types": ["lichess", "web"], "noEmit": true }, - "isolatedModules": true, + "references": [ { "path": "../chat/tsconfig.json" }, { "path": "../common/tsconfig.json" }, diff --git a/ui/tournament/tsconfig.json b/ui/tournament/tsconfig.json index 20e75eaedd4b..15a4d16df5f0 100644 --- a/ui/tournament/tsconfig.json +++ b/ui/tournament/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../tsconfig.base.json", "compilerOptions": { "noEmit": true }, - "isolatedModules": true, + "references": [ { "path": "../chat/tsconfig.json" }, { "path": "../common/tsconfig.json" }, diff --git a/ui/tree/tsconfig.json b/ui/tree/tsconfig.json index 4c7c4bac16fc..f1b4205b70ad 100644 --- a/ui/tree/tsconfig.json +++ b/ui/tree/tsconfig.json @@ -6,6 +6,6 @@ "rootDir": "src", "composite": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/tutor/tsconfig.json b/ui/tutor/tsconfig.json index 8d8505fd66cb..8ce75a656627 100644 --- a/ui/tutor/tsconfig.json +++ b/ui/tutor/tsconfig.json @@ -4,6 +4,6 @@ "types": ["lichess", "web"], "noEmit": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }] } diff --git a/ui/voice/tsconfig.json b/ui/voice/tsconfig.json index 84932ca7fe8f..0a9d91e3cadd 100644 --- a/ui/voice/tsconfig.json +++ b/ui/voice/tsconfig.json @@ -7,6 +7,6 @@ "types": ["lichess", "web"], "composite": true }, - "isolatedModules": true, + "references": [{ "path": "../common/tsconfig.json" }, { "path": "../chess/tsconfig.json" }] } From cfdd1bb27cdd3713226173baa831483f90972c90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Gl=C3=B3rias?= Date: Sat, 13 Jul 2024 00:16:51 +0000 Subject: [PATCH 07/30] Add image the relay to embed image in the relay is the cover of the event we will show it in embed --- modules/relay/src/main/ui/RelayUi.scala | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/relay/src/main/ui/RelayUi.scala b/modules/relay/src/main/ui/RelayUi.scala index 6c87e56ad494..f04a0383cc94 100644 --- a/modules/relay/src/main/ui/RelayUi.scala +++ b/modules/relay/src/main/ui/RelayUi.scala @@ -48,9 +48,12 @@ final class RelayUi(helpers: Helpers)( ) .zoom .graph( - title = rt.fullName, - url = s"$netBaseUrl${rt.path}", - description = shorten(rt.tour.info.toString, 152) + OpenGraph( + title = rt.fullName, + url = s"$netBaseUrl${rt.path}", + description = shorten(rt.tour.info.toString, 152), + image = rt.tour.image.flatMap(imgId => Some(thumbnail.url(imgId, _.Size.Large))) + ) ): main(cls := "analyse is-relay has-relay-tour")( div(cls := "box relay-tour")( From 06a4a53c8394b3bdba00fbb316d1d2da4c59740a Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Fri, 12 Jul 2024 09:15:22 +0700 Subject: [PATCH 08/30] Bump scalachess 16.0.10 and adapt castle change --- modules/game/src/main/Event.scala | 8 ++++---- project/Dependencies.scala | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/game/src/main/Event.scala b/modules/game/src/main/Event.scala index b248423bff52..6e8e477a9b93 100644 --- a/modules/game/src/main/Event.scala +++ b/modules/game/src/main/Event.scala @@ -104,7 +104,7 @@ object Event: threefold = situation.threefoldRepetition, promotion = move.promotion.map { Promotion(_, move.dest) }, enpassant = move.capture.ifTrue(move.enpassant).map(Event.Enpassant(_, !move.color)), - castle = move.castle.map(_.value).map((king, rook) => Castling(king, rook, move.color)), + castle = move.castle.map(c => Castling(c.king, c.kingTo, c.rook, c.rookTo, move.color)), state = state, clock = clock, possibleMoves = situation.destinations, @@ -181,12 +181,12 @@ object Event: "color" -> color ) - case class Castling(king: (Square, Square), rook: (Square, Square), color: Color) extends Event: + case class Castling(king: Square, kingTo: Square, rook: Square, rookTo: Square, color: Color) extends Event: def typ = "castling" def data = Json.obj( - "king" -> Json.arr(king._1.key, king._2.key), - "rook" -> Json.arr(rook._1.key, rook._2.key), + "king" -> Json.arr(king.key, kingTo.key), + "rook" -> Json.arr(rook.key, rookTo.key), "color" -> color ) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 915cf273f5c5..e0958cd94b4a 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -42,7 +42,7 @@ object Dependencies { } object chess { - val version = "16.0.9" + val version = "16.1.0" val core = "org.lichess" %% "scalachess" % version val testKit = "org.lichess" %% "scalachess-test-kit" % version % Test val playJson = "org.lichess" %% "scalachess-play-json" % version From 55e888230a1e7f986a43ff1d20dda050bdfb8eed Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Sat, 13 Jul 2024 11:08:17 +0700 Subject: [PATCH 09/30] Use Castle in Castling --- modules/game/src/main/Event.scala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/game/src/main/Event.scala b/modules/game/src/main/Event.scala index 6e8e477a9b93..f1f199e13125 100644 --- a/modules/game/src/main/Event.scala +++ b/modules/game/src/main/Event.scala @@ -104,7 +104,7 @@ object Event: threefold = situation.threefoldRepetition, promotion = move.promotion.map { Promotion(_, move.dest) }, enpassant = move.capture.ifTrue(move.enpassant).map(Event.Enpassant(_, !move.color)), - castle = move.castle.map(c => Castling(c.king, c.kingTo, c.rook, c.rookTo, move.color)), + castle = move.castle.map(Castling(_, move.color)), state = state, clock = clock, possibleMoves = situation.destinations, @@ -181,9 +181,10 @@ object Event: "color" -> color ) - case class Castling(king: Square, kingTo: Square, rook: Square, rookTo: Square, color: Color) extends Event: + case class Castling(castle: ChessMove.Castle, color: Color) extends Event: def typ = "castling" def data = + import castle.* Json.obj( "king" -> Json.arr(king.key, kingTo.key), "rook" -> Json.arr(rook.key, rookTo.key), From 742e6e896f8becc607348cc2d053cf251cfe4953 Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Sat, 13 Jul 2024 11:49:03 +0700 Subject: [PATCH 10/30] Implement tests for game.Event.PossibleMoves --- build.sbt | 2 +- modules/game/src/main/Event.scala | 1 + modules/game/src/test/EventTest.scala | 34 +++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 modules/game/src/test/EventTest.scala diff --git a/build.sbt b/build.sbt index 3c3d522bba75..04b80bdecdec 100644 --- a/build.sbt +++ b/build.sbt @@ -237,7 +237,7 @@ lazy val user = module("user", lazy val game = module("game", Seq(tree, rating, memo), - Seq(compression) ++ tests.bundle + Seq(compression) ++ tests.bundle ++ Seq(scalacheck, munitCheck, chess.testKit) ) lazy val gameSearch = module("gameSearch", diff --git a/modules/game/src/main/Event.scala b/modules/game/src/main/Event.scala index b248423bff52..8d57682066cb 100644 --- a/modules/game/src/main/Event.scala +++ b/modules/game/src/main/Event.scala @@ -155,6 +155,7 @@ object Event: ) object PossibleMoves: + // We need to keep this implementation for compatibility def json(moves: Map[Square, Bitboard]): JsValue = if moves.isEmpty then JsNull else diff --git a/modules/game/src/test/EventTest.scala b/modules/game/src/test/EventTest.scala new file mode 100644 index 000000000000..b9cf4faf886a --- /dev/null +++ b/modules/game/src/test/EventTest.scala @@ -0,0 +1,34 @@ +package lila.game + +import chess.* +import chess.bitboard.Bitboard + +import cats.syntax.all.* +import chess.CoreArbitraries.given +import org.scalacheck.Prop.{ forAll, propBoolean } +import play.api.libs.json.* + +class EventTest extends munit.ScalaCheckSuite: + + test("PossibleMoves anti regression"): + val moves = Map(Square.E2 -> Bitboard(List(Square.E4, Square.D4, Square.E3))) + val str = stringFromPossibleMoves(moves) + // If We somehow change the order of destinations, We may need to update this test + assertEquals(str, "e2e3d4e4") + + test("PossibleMoves with empty map"): + assertEquals(Event.PossibleMoves.json(Map.empty), JsNull) + + test("PossibleMoves writes every square"): + forAll: (m: Map[Square, Bitboard]) => + m.nonEmpty ==> { + val str = stringFromPossibleMoves(m) + val totalSquares = m.values.foldLeft(0)(_ + _.count) + m.size + // str length = total squares * 2 + spaces in between + assertEquals(str.length, totalSquares * 2 + m.size - 1) + } + + private def stringFromPossibleMoves(moves: Map[Square, Bitboard]): String = + Event.PossibleMoves.json(moves) match + case JsString(str) => str + case _ => failSuite("Expected JsString") From 87a858f22deccc2fa9baf5dd48809328aeeb553b Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sat, 13 Jul 2024 08:38:13 +0200 Subject: [PATCH 11/30] New Crowdin updates (#15707) * New translations: site.xml (Persian) * New translations: study.xml (Persian) * New translations: class.xml (Persian) * New translations: study.xml (Persian) * New translations: broadcast.xml (Lithuanian) * New translations: arena.xml (Finnish) * New translations: broadcast.xml (Lithuanian) * New translations: tfa.xml (Lithuanian) * New translations: preferences.xml (Lithuanian) * New translations: team.xml (Lithuanian) * New translations: site.xml (Lithuanian) --- translation/dest/arena/fi-FI.xml | 1 + translation/dest/broadcast/lt-LT.xml | 13 +++++++++ translation/dest/class/fa-IR.xml | 20 ++++++------- translation/dest/preferences/lt-LT.xml | 1 + translation/dest/site/fa-IR.xml | 2 +- translation/dest/site/lt-LT.xml | 8 +++--- translation/dest/study/fa-IR.xml | 40 +++++++++++++------------- translation/dest/team/lt-LT.xml | 10 +++++++ translation/dest/tfa/lt-LT.xml | 3 ++ 9 files changed, 63 insertions(+), 35 deletions(-) diff --git a/translation/dest/arena/fi-FI.xml b/translation/dest/arena/fi-FI.xml index 83809b27f9ea..ef849bf47fbf 100644 --- a/translation/dest/arena/fi-FI.xml +++ b/translation/dest/arena/fi-FI.xml @@ -66,6 +66,7 @@ Pelaa nopeasti ja palaa aulaan, niin voit pelata lisää pelejä ja ansaita lis Valitse joukkueesi Mitä joukkuetta edustat tässä taistossa? Sinun täytyy liittyä johonkin näistä joukkueista osallistuaksesi turnaukseen! + Luodut Äskettäin pelatut Parhaat tulokset Tilastot diff --git a/translation/dest/broadcast/lt-LT.xml b/translation/dest/broadcast/lt-LT.xml index 0bd1e8ce08f1..c3b632c11e6a 100644 --- a/translation/dest/broadcast/lt-LT.xml +++ b/translation/dest/broadcast/lt-LT.xml @@ -41,4 +41,17 @@ Ištrinti šį turnyrą Užtikrintai ištrinti visą turnyrą, visus raundus ir visas jų partijas. Automatinė lyderių lentelė + Apskaičiuokite ir parodykite paprastą lyderių lentelę pagal žaidimo rezultatus + Pasirenkama: pakeiskite žaidėjų vardus, reitingus ir titulus + Laikotarpis sekundėmis + Pasirinkimas, kiek laiko reikės laukti tarp užklausų. Min 2s, max 60s. Pagal numatytuosius nustatymus-automatinis, atsižvelgiant į žiūrinčiųjų skaičių. + FIDE federacijos + 10 aukščiausių reitingų + FIDE žaidėjai + FIDE žaidėjas nerastas + FIDE profilis + Federacija + Amžius šiemet + Nereitinguota(s) + Neseniai sukurti turnyrai diff --git a/translation/dest/class/fa-IR.xml b/translation/dest/class/fa-IR.xml index 9e029ac4fb5e..abcc36c5ee14 100644 --- a/translation/dest/class/fa-IR.xml +++ b/translation/dest/class/fa-IR.xml @@ -14,7 +14,7 @@ کلاس را ببندید توسط %s اخراج شد بازگشایی - دانش‌جو را خارج کنید + برداشتن شطرنج‌آموز حذف شده دانش‌جو را برای بازگشت دعوت کنید یک پیام به همه دانش‌جویان ارسال نمایید. @@ -31,10 +31,10 @@ توسط %2$s به %1$s دعوت شد نام واقعی خصوصی. هرگز در خارج از کلاس نمایش داده نخواهد شد. به یاد آوری دانش آموز کمک می کند. - دانش‌آموز اضافه کنید + افزودن شطرنج‌آموز رُخ‌نما %1$s برای %2$s ساخته شد. - دانش‌جو: %1$s -نامِ کاربری: %2$s + شطرنج‌آموز: %1$s +نام کاربری: %2$s گذرواژه: %3$s یک اکانت Lichess را دعوت کنید اگر دانش آموز هم اکنون دارای یک حساب در lichess می باشد، شما می توانید او را به کلاس دعوت کنید. @@ -46,7 +46,7 @@ هیچ آدرس ایمیلی نیاز نیست. یک رمز عبور ساخته خواهد شد و شما باید آن را به دانش آموز انتقال بدهید تا بتواند وارد شود. مهم: یک دانش‌جو نباید حسابهای کاربری متعدد داشته باشد. اگر قبلاً یکی دارند، به جای آن از فرم دعوت استفاده کنید. - فقط برای دانش آموزان واقعی حساب باز کنید. از این امکان برای درست کردن چندین حساب برای خود استفاده نکنید. در غیر این صورت حساب شما مسدود خواهد شد. + فقط برای شطرنج‌آموزان واقعی حساب بسازید. جهت ساخت حساب‌های چندگانه برای خودتان استفاده نکنید. حساب‌تان بسته می‌شود. نام کاربریِ Lichess یک نام کاربری جدید تولید کنید به کلاس %s خوش آمدید. @@ -77,13 +77,13 @@ %s معلم - دانشجو - %s دانشجو + شطرنج‌آموز + %s شطرنج‌آموز - دانشجویان + شطرنج‌آموزان پیشرفت - هنوز، هیچ دانشجویی در کلاس نیست. - هیچ دانشجویی اخراج نشده است. + هنوز، هیچ شطرنج‌آموزی در کلاس نیست. + شطرنج‌آموز برداشته‌شده وجود ندارد. تعداد روزها زمان بازی کردن %1$s در %2$s روز اخیر diff --git a/translation/dest/preferences/lt-LT.xml b/translation/dest/preferences/lt-LT.xml index bb0fc26af08a..f91566577615 100644 --- a/translation/dest/preferences/lt-LT.xml +++ b/translation/dest/preferences/lt-LT.xml @@ -15,6 +15,7 @@ Raidės (K, Q, R, B, N) „Zen“ režimas Rodyti žaidėjų reitingus + Parodykite žaidėjo emociją Tai leidžia iš svetainės paslėpti visus reitingus ir padeda susifokusuoti ties šachmatais. Partijos vis dar gali būti reitinguojamos. Šis pasirinkimas skirtas tik nustatyti, ką galite matyti. Rodyti lentos dydžio keitimo simbolį Tik pradinėje padėtyje diff --git a/translation/dest/site/fa-IR.xml b/translation/dest/site/fa-IR.xml index 76878b35bb5b..fe0a0d1fc3e9 100644 --- a/translation/dest/site/fa-IR.xml +++ b/translation/dest/site/fa-IR.xml @@ -954,7 +954,7 @@ توصیف بازی هم‌زمان آیا می‌خواهید مطلبی را به شرکت‌کنندگان بگویید؟ %s برای کُدهای دستوری پیچیده‌تر در دسترس است. - وب‌نشانی بازی یا وب‌نشانی فصل مطالعه را برای جاسازی آن، جایگذاری کنید. + وب‌نشانی بازی یا وب‌نشانی بخشی از مطالعه را، برای جاسازی آن، جایگذاری کنید. ذر منطقه زمانی شما چت مسابقه بدون چت diff --git a/translation/dest/site/lt-LT.xml b/translation/dest/site/lt-LT.xml index ad54f07ac490..3cd2d82df4bf 100644 --- a/translation/dest/site/lt-LT.xml +++ b/translation/dest/site/lt-LT.xml @@ -783,7 +783,7 @@ kompiuterinę analizę, partijos pokalbį bei URL dalinimuisi. padaryti pasirinktą ėjimą Naujas turnyras Šachmatų turnyras su įvairiomis laiko kontrolėmis ir variantais - Žaiskite aukšto tempo šachmatų turnyruose! Prisijunkite prie oficialaus suplanuoto turnyro arba sukurkite savo. + Žaiskite aukšto tempo šachmatų turnyruose! Prisijunkite prie oficialaus suplanuoto turnyro arba sukurkite savo. Kulka, žaibas, klasikiniai, Chess960, King of the Hill, Threecheck ir daugiau parinkčių, skirtų begalinėms šachmatų pramogoms. Turnyras nerastas Turnyras neegzistuoja. Jis galėjo būti atšauktas, jeigu iki jo pradžios išėjo visi žaidėjai. @@ -841,7 +841,7 @@ kompiuterinę analizę, partijos pokalbį bei URL dalinimuisi. Jokių reklamų Visiškai parengta Telefonui ir planšetei - Žaibo, blic, klasikiniai + Kulka, Žaibas, klasikiniai Korespondenciniai Žaidimas su ir be interneto Parodyti sprendimą @@ -974,12 +974,12 @@ kompiuterinę analizę, partijos pokalbį bei URL dalinimuisi. Ieškokite, arba pradėkite naują diskusiją Keisti Kulka - Blitz + Žaibas Greitieji Klasikiniai Be proto greitos partijos: mažiau nei 30 sekundžių Labai greitos partijos: mažiau nei 3 minutės - Blic partijos: nuo 3 iki 8 minučių + Žaibo partijos: nuo 3 iki 8 minučių Greitosios partijos: nuo 8 iki 25 minučių Klasikinės partijos: 25 minutės ir daugiau Korespondencinės partijos: viena ar kelios dienos ėjimui diff --git a/translation/dest/study/fa-IR.xml b/translation/dest/study/fa-IR.xml index d0b1dbe25345..79746db9829e 100644 --- a/translation/dest/study/fa-IR.xml +++ b/translation/dest/study/fa-IR.xml @@ -16,7 +16,7 @@ تازگی به‌روزشده محبوب‌ترین‌ براساس حروف الفبا - افزودن فصل جدید + افزودن بخش جدید %s بخش %s بخش @@ -46,10 +46,10 @@ نظر دادن به این پوزیسیون قرار دادن توضیحات برای این حرکت حرکت‌نویسی به‌همراه علامت‌ها - این فصل برای تحلیل شدن بسیار کوتاه است. + این بخش برای تحلیل، بسیار کوتاه است. تنها مشارکت‌گران این مطالعه، می‌توانند درخواست تحلیل رایانه‌ای دهند. یک تحلیل کامل رایانه‌ای کارساز-سو از شاخه اصلی بگیرید. - مطمئن شوید که فصل کامل است. شما فقط یک بار می‌توانید درخواست تحلیل بدهید. + مطمئن شوید که بخش کامل است. شما فقط یک بار می‌توانید درخواست تحلیل دهید. تمام اعضای همگام شده در پوزیسیون یکسان باقی می‌مانند تغییرات را با تماشاگران به اشتراک بگذارید و آنها را در سرور ذخیره کنید در حال انجام @@ -62,11 +62,11 @@ همسانیدن PGN مطالعه بارگیری تمام بازی ها - PGN فصل - کپی کردن PGN + PGN ِ بخش + رونوشت‌گیری PGN بارگیری بازی وب‌نشانی مطالعه - وب‌نشانی فصل جاری + وب‌نشانی بخش جاری می‌توانید این را در انجمن یا وبنوشت Lichessتان برای جاسازی قرار دهید از وضعیت نخستین بیاغازید شروع از %s @@ -76,24 +76,24 @@ بگشایید %1$s، به دست %2$s برای شما آورده شده است مطالعه یافت نشد - ویرایش فصل - وصل جدید + ویرایش بخش + بخش نو درونبُرد از %s جهت حالت تجزیه تحلیل یادداشت سنجاقیده‌ی بخش - ذخیره فصل + ذخیره بخش پاک کردن حرکت‌نویسی پاک کردن تغییرات - حذف فصل - آیا میخواهید این فصل را پاک کنید؟امکان برگرداندن آن وجود ندارد! + حذف بخش + حذف این بخش. بازگشت وجود ندارد! همه دیدگاه‌ها، نمادها و شکل‌های ترسیم شده در این بخش، پاک شوند درست زیر صفحه بازی هیچ تحلیل ساده پنهان کردن حرکت بعدی درس تعاملی - فصل %s + بخش %s خالی از موقعیت ابتدایی شروع نمایید ویرایشگر @@ -108,7 +108,7 @@ وب‌نشانی بازی‌ها، یکی در هر خط بازی‌ها را از %1$s یا %2$s بارگذاری نمایید - ساخت فصل + ساخت بخش ساخت مطالعه ویرایش مطالعه دیدگی @@ -155,14 +155,14 @@ بازی‌متقابل تنگی زمان دارای مزیت و برتری - با ایده - فصل بعدی - فصل پیشین + با طرح + بخش بعدی + بخش پیشین عملگرهای مطالعه - مباحث - مباحث من - مباحث معروف - مدیریت مباحث + موضوع‌ها + موضوع‌های من + موضوع‌های محبوب + مدیریت موضوع‌ها بازگشت دوباره بازی کنید شما در این موقعیت چه حرکتی می کنید؟ diff --git a/translation/dest/team/lt-LT.xml b/translation/dest/team/lt-LT.xml index 6ac395faffcb..3e1f63edabb9 100644 --- a/translation/dest/team/lt-LT.xml +++ b/translation/dest/team/lt-LT.xml @@ -56,8 +56,18 @@ Taip galite pakviesti žaidėjus prisijungti į turnyrą ar komandos kovą. (Nebūtina) Įėjimo kodas, kurį norėdami prisijungti turi žinoti visi nauji komandos nariai. Netinkamas kodas. Ši komanda jau egzistuoja. + Artėjantys turnyrai Baigti turnyrai Atsisakytos užklausos Prisijunkite prie oficialios %s komandos ir gaukite naujienas bei pranešimus apie renginius Komandos puslapis + Šis turnyras baigėsi, ir komandos nebegali būti atnaujinamos. + Komandų, kurios varžysis šiame mūšyje, sąrašas. + Viena komanda eilutėje. Naudokite automatinį užbaigimą. + Galite nukopijuoti ir įklijuoti šį sąrašą iš vieno turnyro į kitą! + +Negalite pašalinti komandos, jei žaidėjas su ja jau prisijungė prie turnyro. + Lyderių skaičius komandoje. Jų taškų suma yra komandos rezultatas. + Prasidėjus turnyrui, šios vertės keisti tikrai neturėtumėte! + Vidinė komanda diff --git a/translation/dest/tfa/lt-LT.xml b/translation/dest/tfa/lt-LT.xml index ba26f027bdce..e8c9582a1659 100644 --- a/translation/dest/tfa/lt-LT.xml +++ b/translation/dest/tfa/lt-LT.xml @@ -2,13 +2,16 @@ Dviejų lygių tapatumo nustatymas Dviejų lygių tapatumo nustatymas jūsų paskyrai suteikia papildomą saugumo sluoksnį. + Gaukite dviejų veiksnių autentifikavimo programą. Rekomenduojame šias programas: Nuskaitykite QR kodą su programa. Įveskite slaptažodį ir programoje sugeneruota kodą, norėdami užbaigti sąranką. Tapatumo nustatymo kodas bus reikalingas kiekvieno prisijungimo metu. Jei nepavyksta nuskenuoti kodo, įveskite paslaptį %s į savo programėlę. Tapatumo nustatymo kodas + Pastaba: jei prarasite prieigą prie savo dviejų veiksmų autentifikavimo kodų, galite atlikti %s el. paštu. Įjungti dviejų lygių tapatumo nustatymą Išjungti dviejų lygių tapatumo nustatymą Dviejų lygių tapatumo nustatymas įjungtas + Jums reikia slaptažodžio ir autentifikavimo kodo iš savo autentifikavimo programos, kad išjungti dviejų veiksmų autentifikavimą. Norėdami pamatyti autentikacijos kodą ir patvirtinti savo tapatybę, savo įrenginyje atverkite dviejų-faktorių autentikacijos programėlę. Prašome įjungti paskyros apsaugojimą prisijungimu dviem būdais https://lichess.org/account/twofactor. Jūs gavote šią žinutę, nes jūsų paskyra turi ypatingas pareigas: esate komandos kapitonas, treneris, mokytojas arba transliuotojas From 571af2db010cb2bfa1b9d1ce254c6257ee2d4302 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sat, 13 Jul 2024 08:47:27 +0200 Subject: [PATCH 12/30] simplify relay graph image scala --- modules/relay/src/main/ui/RelayUi.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/relay/src/main/ui/RelayUi.scala b/modules/relay/src/main/ui/RelayUi.scala index f04a0383cc94..03d8dc70f909 100644 --- a/modules/relay/src/main/ui/RelayUi.scala +++ b/modules/relay/src/main/ui/RelayUi.scala @@ -52,7 +52,7 @@ final class RelayUi(helpers: Helpers)( title = rt.fullName, url = s"$netBaseUrl${rt.path}", description = shorten(rt.tour.info.toString, 152), - image = rt.tour.image.flatMap(imgId => Some(thumbnail.url(imgId, _.Size.Large))) + image = rt.tour.image.map(thumbnail.url(_, _.Size.Large)) ) ): main(cls := "analyse is-relay has-relay-tour")( From 73c58a3a18249630ff94586ffe58b6903899e8c7 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sat, 13 Jul 2024 09:39:47 +0200 Subject: [PATCH 13/30] tweak playban for new accounts --- modules/playban/src/main/model.scala | 14 +++++++++----- modules/playban/src/test/PlaybanTest.scala | 8 ++++---- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/modules/playban/src/main/model.scala b/modules/playban/src/main/model.scala index 80087d7a1e90..d4a207b6fdd4 100644 --- a/modules/playban/src/main/model.scala +++ b/modules/playban/src/main/model.scala @@ -45,7 +45,7 @@ case class UserRecord( case _ => 2 def badOutcomesStreakSize(age: Days): Int = - if age <= 1 + if age < 1 then 3 else if bans.size == 0 then 6 else if bans.size < 3 then 5 @@ -62,6 +62,9 @@ case class UserRecord( val streakSize = badOutcomesStreakSize(age) outcomes.sizeIs >= streakSize && outcomes.takeRight(streakSize).forall(Outcome.Good !=) + } || { + // bad first 2 games + age < 1 && outcomes.sizeIs == 2 && outcomes.forall(Outcome.Good !=) } } } @@ -105,13 +108,14 @@ object TempBan: */ def make(bans: Vector[TempBan], age: Days): TempBan = make { - (bans.lastOption - .so { prev => + val base = bans.lastOption + .so: prev => prev.endsAt.toNow.toHours.toSaturatedInt match case h if h < 72 => prev.mins * (132 - h) / 60 case h => (55.6 * prev.mins / (Math.pow(5.56 * prev.mins - 54.6, h / 720) + 54.6)).toInt - } - .atLeast(baseMinutes)) * (if age <= 3 then 2 else 1) + .atLeast(baseMinutes) + val multiplier = if age == Days(0) then 3 else if age <= 3 then 2 else 1 + base * multiplier } enum Outcome(val id: Int, val name: String): diff --git a/modules/playban/src/test/PlaybanTest.scala b/modules/playban/src/test/PlaybanTest.scala index 025b64f76126..340a4f4ed24d 100644 --- a/modules/playban/src/test/PlaybanTest.scala +++ b/modules/playban/src/test/PlaybanTest.scala @@ -5,7 +5,7 @@ import scalalib.model.Days class PlaybanTest extends munit.FunSuite: val userId = UserId("user") - val brandNew = Days(0) + val brandNew = Days(scalalib.time.daysBetween(nowInstant.minusHours(1), nowInstant)) // 0 test("empty"): val rec = UserRecord(userId, none, none, none) @@ -17,10 +17,10 @@ class PlaybanTest extends munit.FunSuite: test("new 2 aborts"): val rec = UserRecord(userId, Vector.fill(2)(Outcome.Abort).some, none, none) - assertEquals(rec.bannable(brandNew), None) + assert(rec.bannable(brandNew).isDefined) - test("new 3 aborts"): - val rec = UserRecord(userId, Vector.fill(3)(Outcome.Abort).some, none, none) + test("new 1 good and 3 aborts"): + val rec = UserRecord(userId, Some(Outcome.Good +: Vector.fill(3)(Outcome.Abort)), none, none) assert(rec.bannable(brandNew).isDefined) test("good and aborts"): From afc419b12d0fdfa85132f5a5bc6234aa1a6a6ede Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 14 Jul 2024 10:06:50 +0200 Subject: [PATCH 14/30] better select displayable imgur urls - closes #15714 --- ui/msg/src/view/enhance.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/msg/src/view/enhance.ts b/ui/msg/src/view/enhance.ts index b54622784c53..a69a8b901029 100644 --- a/ui/msg/src/view/enhance.ts +++ b/ui/msg/src/view/enhance.ts @@ -4,7 +4,7 @@ import { linkRegex, linkReplace, newLineRegex, expandMentions } from 'common/ric import { escapeHtml } from 'common'; export { isMoreThanText } from 'common/richText'; -const imgurRegex = /https?:\/\/(?:i\.)?imgur\.com\/(\w+)(?:\.jpe?g|\.png|\.gif)?/; +const imgurRegex = /https?:\/\/(?:i\.)?imgur\.com\/(\w{7})(?:\.jpe?g|\.png|\.gif)?/; const giphyRegex = /https:\/\/(?:media\.giphy\.com\/media\/|giphy\.com\/gifs\/(?:\w+-)*)(\w+)(?:\/giphy\.gif)?/; const teamMessageRegex = From bbe22cf490bc661f8f962eaea07bed1f99639aca Mon Sep 17 00:00:00 2001 From: Jonathan Gamble Date: Sun, 14 Jul 2024 10:09:09 -0500 Subject: [PATCH 15/30] asset hash linking --- .gitignore | 3 +- modules/web/src/main/AssetManifest.scala | 20 ++- .../web/src/main/helper/AssetFullHelper.scala | 3 +- ui/.build/src/build.ts | 4 +- ui/.build/src/clean.ts | 7 +- ui/.build/src/copies.ts | 42 +++++-- ui/.build/src/esbuild.ts | 2 +- ui/.build/src/main.ts | 4 + ui/.build/src/manifest.ts | 116 +++++++++++++----- ui/.build/src/monitor.ts | 4 +- ui/.build/src/parse.ts | 20 +-- ui/.build/src/sass.ts | 10 +- ui/@types/lichess/index.d.ts | 4 +- .../src/study/practice/studyPracticeCtrl.ts | 4 +- ui/bits/src/bits.soundMove.ts | 6 +- ui/dasher/src/background.ts | 2 +- ui/learn/src/sound.ts | 6 +- ui/puz/src/util.ts | 6 +- ui/puzzle/src/ctrl.ts | 6 +- ui/site/package.json | 7 +- ui/site/src/asset.ts | 5 +- ui/site/src/sound.ts | 11 +- 22 files changed, 198 insertions(+), 94 deletions(-) diff --git a/.gitignore b/.gitignore index 5c91d043ca27..40f6e61add31 100644 --- a/.gitignore +++ b/.gitignore @@ -14,14 +14,15 @@ project/metals.sbt project/project project/target public/compiled +public/hashed public/npm public/lifat public/css/ +public/json target data/ dist/ node_modules/ -local/ ui/common/css/theme/gen/*.scss ui/common/**/*.js ui/common/**/*.d.ts diff --git a/modules/web/src/main/AssetManifest.scala b/modules/web/src/main/AssetManifest.scala index ac5690cec609..52cf973d3caf 100644 --- a/modules/web/src/main/AssetManifest.scala +++ b/modules/web/src/main/AssetManifest.scala @@ -9,18 +9,24 @@ import java.nio.file.{ Files, Path, Paths } import lila.core.config.NetConfig case class SplitAsset(name: String, imports: List[String]) -case class AssetMaps(js: Map[String, SplitAsset], css: Map[String, String], modified: Instant) +case class AssetMaps( + js: Map[String, SplitAsset], + css: Map[String, String], + hashed: Map[String, String], + modified: Instant +) final class AssetManifest(environment: Environment, net: NetConfig)(using ws: StandaloneWSClient)(using Executor ) extends lila.ui.AssetManifest: - private var maps: AssetMaps = AssetMaps(Map.empty, Map.empty, java.time.Instant.MIN) + private var maps: AssetMaps = AssetMaps(Map.empty, Map.empty, Map.empty, java.time.Instant.MIN) private val filename = s"manifest.${if net.minifiedAssets then "prod" else "dev"}.json" private val logger = lila.log("assetManifest") def js(key: String): Option[SplitAsset] = maps.js.get(key) def css(key: String): Option[String] = maps.css.get(key) + def hashed(path: String): Option[String] = maps.hashed.get(path) def deps(keys: List[String]): List[String] = keys.flatMap { key => js(key).so(_.imports) }.distinct def lastUpdate: Instant = maps.modified @@ -82,7 +88,15 @@ final class AssetManifest(environment: Environment, net: NetConfig)(using ws: St (k, s"$k.$hash.css") } .toMap - AssetMaps(js, css, nowInstant) + val hashed = (manifest \ "hashed") + .as[JsObject] + .value + .map { (k, asset) => + val hashedName = (asset \ "hash").as[String] + (k, s"hashed/$hashedName") + } + .toMap + AssetMaps(js, css, hashed, nowInstant) private def fetchManifestJson(filename: String) = val resource = s"${net.assetBaseUrlInternal}/assets/compiled/$filename" diff --git a/modules/web/src/main/helper/AssetFullHelper.scala b/modules/web/src/main/helper/AssetFullHelper.scala index 1abdb8104919..d9b76369b6bd 100644 --- a/modules/web/src/main/helper/AssetFullHelper.scala +++ b/modules/web/src/main/helper/AssetFullHelper.scala @@ -31,7 +31,8 @@ trait AssetFullHelper: def assetVersion = lila.core.net.AssetVersion.current - def assetUrl(path: String): String = s"$assetBaseUrl/assets/_$assetVersion/$path" + def assetUrl(path: String): String = + s"$assetBaseUrl/assets/${manifest.hashed(path).getOrElse(s"_$assetVersion/$path")}" private val dataCssKey = attr("data-css-key") def cssTag(key: String): Frag = diff --git a/ui/.build/src/build.ts b/ui/.build/src/build.ts index 23aeeb81ffb0..5cbdcac46d3f 100644 --- a/ui/.build/src/build.ts +++ b/ui/.build/src/build.ts @@ -7,7 +7,7 @@ import { sass, stopSass } from './sass'; import { esbuild, stopEsbuild } from './esbuild'; import { copies, stopCopies } from './copies'; import { startMonitor, stopMonitor } from './monitor'; -import { initManifest, writeManifest } from './manifest'; +import { writeManifest } from './manifest'; import { clean } from './clean'; import { LichessModule, env, errorMark, colors as c } from './main'; @@ -32,11 +32,11 @@ export async function build(mods: string[]) { await Promise.allSettled([ fs.promises.mkdir(env.jsDir), fs.promises.mkdir(env.cssDir), + fs.promises.mkdir(env.hashDir), fs.promises.mkdir(env.themeGenDir), fs.promises.mkdir(env.cssTempDir), ]); - await initManifest(); startMonitor(mods); await Promise.all([sass(), copies(), esbuild(tsc())]); } diff --git a/ui/.build/src/clean.ts b/ui/.build/src/clean.ts index 441188b18b0e..0eabe07d47ce 100644 --- a/ui/.build/src/clean.ts +++ b/ui/.build/src/clean.ts @@ -18,12 +18,13 @@ const allGlobs = [ 'public/compiled', 'public/npm', 'public/css', + 'public/hashed', ]; -export async function clean(globs: string[] = allGlobs) { - if (!env.clean) return; +export async function clean(globs?: string[]) { + if (!env.clean && !globs) return; - for (const glob of globs) { + for (const glob of globs ?? allGlobs) { env.log(`Cleaning '${c.cyan(glob)}'...`); for await (const f of fg.stream(glob, { cwd: env.rootDir, ...globOpts })) { if (f.includes('ui/.build') && !f.includes('dist/css')) continue; diff --git a/ui/.build/src/copies.ts b/ui/.build/src/copies.ts index 22977547e64e..0ea1dc7a2a67 100644 --- a/ui/.build/src/copies.ts +++ b/ui/.build/src/copies.ts @@ -1,6 +1,7 @@ import * as fs from 'node:fs'; import * as path from 'node:path'; -import { globArray } from './parse'; +import { globArray, globArrays } from './parse'; +import { hashedManifest, writeManifest } from './manifest'; import { Sync, env, errorMark, colors as c } from './main'; const syncWatch: fs.FSWatcher[] = []; @@ -18,30 +19,47 @@ export async function copies() { const watched = new Map(); const updated = new Set(); - const fire = () => { - updated.forEach(d => watched.get(d)?.forEach(globSync)); - updated.clear(); - watchTimeout = undefined; - }; for (const mod of env.building) { - if (!mod?.sync) continue; - for (const cp of mod.sync) { + for (const cp of mod.sync ?? []) { for (const src of await globSync(cp)) { - watched.set(src, [...(watched.get(src) ?? []), cp]); + if (env.watch) watched.set(src, [...(watched.get(src) ?? []), cp]); } } if (!env.watch) continue; + const sources = await globArrays(mod.hashGlobs, { cwd: env.outDir }); + + for (const src of sources.filter(isUnmanagedAsset)) { + if (!watched.has(path.dirname(src))) watched.set(path.dirname(src), []); + } + } + if (env.watch) for (const dir of watched.keys()) { const watcher = fs.watch(dir); + watcher.on('change', () => { updated.add(dir); clearTimeout(watchTimeout); - watchTimeout = setTimeout(fire, 2000); + + watchTimeout = setTimeout(() => { + Promise.all([...updated].flatMap(d => (watched.get(d) ?? []).map(x => globSync(x)))).then(() => { + hashedManifest(); + writeManifest(); + }); + updated.clear(); + watchTimeout = undefined; + }, 2000); }); watcher.on('error', (err: Error) => env.error(err)); syncWatch.push(watcher); } - } + hashedManifest(); +} + +export function isUnmanagedAsset(absfile: string) { + if (!absfile.startsWith(env.outDir)) return false; + const name = absfile.slice(env.outDir.length + 1); + if (['compiled/', 'hashed/', 'css/'].some(dir => name.startsWith(dir))) return false; + return true; } async function globSync(cp: Sync): Promise> { @@ -54,7 +72,7 @@ async function globSync(cp: Sync): Promise> { ? cp.src.slice(0, globIndex - 1) : path.dirname(cp.src.slice(0, globIndex)); - const srcs = await globArray(cp.src, { cwd: cp.mod.root, abs: false }); + const srcs = await globArray(cp.src, { cwd: cp.mod.root, absolute: false }); watchDirs.add(path.join(cp.mod.root, globRoot)); env.log(`[${c.grey(cp.mod.name)}] - Sync '${c.cyan(cp.src)}' to '${c.cyan(cp.dest)}'`); diff --git a/ui/.build/src/esbuild.ts b/ui/.build/src/esbuild.ts index 43b74b4c37d2..fe38b23b0aa4 100644 --- a/ui/.build/src/esbuild.ts +++ b/ui/.build/src/esbuild.ts @@ -2,7 +2,7 @@ import * as path from 'node:path'; import * as es from 'esbuild'; import { preModule } from './build'; import { env, errorMark, colors as c } from './main'; -import { js as jsManifest } from './manifest'; +import { jsManifest } from './manifest'; const bundles = new Map(); const esbuildCtx: es.BuildContext[] = []; diff --git a/ui/.build/src/main.ts b/ui/.build/src/main.ts index 005ce40feb65..3b8af713a549 100644 --- a/ui/.build/src/main.ts +++ b/ui/.build/src/main.ts @@ -78,6 +78,7 @@ export interface LichessModule { post: string[][]; // post-bundle build steps from package.json scripts hasTsconfig?: boolean; // fileExists('tsconfig.json') bundles?: string[]; + hashGlobs?: string[]; sync?: Sync[]; // pre-bundle filesystem copies from package json } @@ -157,6 +158,9 @@ class Env { get outDir(): string { return path.join(this.rootDir, 'public'); } + get hashDir(): string { + return path.join(this.outDir, 'hashed'); + } get themeDir(): string { return path.join(this.uiDir, 'common', 'css', 'theme'); } diff --git a/ui/.build/src/manifest.ts b/ui/.build/src/manifest.ts index 169edc8524df..9c034d39612f 100644 --- a/ui/.build/src/manifest.ts +++ b/ui/.build/src/manifest.ts @@ -4,44 +4,28 @@ import * as fs from 'node:fs'; import * as crypto from 'node:crypto'; import * as es from 'esbuild'; import { env, colors as c, warnMark } from './main'; -import { globArray } from './parse'; +import { globArray, globArrays } from './parse'; +import { isUnmanagedAsset } from './copies'; import { allSources } from './sass'; -type Manifest = { [key: string]: { hash?: string; imports?: string[] } }; +type Manifest = { [key: string]: { hash?: string; imports?: string[]; mtime?: number } }; -const current: { js: Manifest; css: Manifest; dirty: boolean } = { js: {}, css: {}, dirty: false }; -let writeTimer: NodeJS.Timeout; +const current: { js: Manifest; css: Manifest; hashed: Manifest; dirty: boolean } = { + js: {}, + css: {}, + hashed: {}, + dirty: false, +}; -export async function initManifest() { - if (env.building.length === env.modules.size) return; - // we're building a subset of modules. reuse the previousl full manifest for - // a shot at changes viewable in the browser, otherwise punt. - if (!fs.existsSync(env.manifestFile)) return; - if (Object.keys(current.js).length && Object.keys(current.css).length) return; - const manifest = JSON.parse(await fs.promises.readFile(env.manifestFile, 'utf-8')); - delete manifest.js.manifest; - current.js = manifest.js; - current.css = manifest.css; -} +let writeTimer: NodeJS.Timeout; -export async function writeManifest() { +export function writeManifest() { if (!current.dirty) return; clearTimeout(writeTimer); writeTimer = setTimeout(write, 500); } -export async function css() { - const files = await globArray(path.join(env.cssTempDir, '*.css'), { abs: true }); - const css: { name: string; hash: string }[] = await Promise.all(files.map(hashMove)); - const newCssManifest: Manifest = {}; - for (const { name, hash } of css) newCssManifest[name] = { hash }; - if (isEquivalent(newCssManifest, current.css)) return; - current.css = shallowSort({ ...current.css, ...newCssManifest }); - current.dirty = true; - writeManifest(); -} - -export async function js(meta: es.Metafile) { +export async function jsManifest(meta: es.Metafile) { const newJsManifest: Manifest = {}; for (const [filename, info] of Object.entries(meta.outputs)) { const out = parsePath(filename); @@ -64,6 +48,54 @@ export async function js(meta: es.Metafile) { current.dirty = true; } +export async function cssManifest() { + const files = await globArray(path.join(env.cssTempDir, '*.css')); + const css: { name: string; hash: string }[] = await Promise.all(files.map(hashMoveCss)); + const newCssManifest: Manifest = {}; + for (const { name, hash } of css) newCssManifest[name] = { hash }; + if (isEquivalent(newCssManifest, current.css)) return; + current.css = shallowSort({ ...current.css, ...newCssManifest }); + current.dirty = true; + writeManifest(); +} + +export async function hashedManifest() { + const newHashLinks = new Map(); + const alreadyHashed = new Map(); + const sources: string[] = ( + await globArrays( + env.building.flatMap(x => x.hashGlobs ?? []), + { cwd: env.outDir }, + ) + ).filter(isUnmanagedAsset); + const sourceStats = await Promise.all(sources.map(file => fs.promises.stat(file))); + + for (const [i, stat] of sourceStats.entries()) { + const name = sources[i].slice(env.outDir.length + 1); + + if (stat.mtimeMs === current.hashed[name]?.mtime) alreadyHashed.set(name, current.hashed[name].hash!); + else newHashLinks.set(name, stat.mtimeMs); + } + + await Promise.allSettled( + [...alreadyHashed].map(([name, hash]) => + fs.promises.symlink(path.join(env.outDir, name), path.join(env.hashDir, hash)), + ), + ); + + for (const { name, hash } of await Promise.all([...newHashLinks.keys()].map(hashLink))) { + current.hashed[name] = Object.defineProperty({ hash }, 'mtime', { value: newHashLinks.get(name) }); + } + + if (newHashLinks.size === 0 && alreadyHashed.size === Object.keys(current.hashed).length) return; + + for (const name of Object.keys(current.hashed)) { + if (!sources.some(x => x.endsWith(name))) delete current.hashed[name]; + } + current.dirty = true; + writeManifest(); +} + async function write() { if (!env.manifestOk || !(await isComplete())) return; const commitMessage = cps @@ -71,13 +103,14 @@ async function write() { .trim() .replace(/'/g, ''') .replace(/"/g, '"'); + const clientJs: string[] = [ 'if (!window.site) window.site={};', 'if (!window.site.info) window.site.info={};', `window.site.info.commit='${cps.execSync('git rev-parse -q HEAD', { encoding: 'utf-8' }).trim()}';`, `window.site.info.message='${commitMessage}';`, `window.site.debug=${env.debug};`, - 'const m=window.site.manifest={css:{},js:{}};', + 'const m=window.site.manifest={css:{},js:{},hashed:{}};', ]; for (const [name, info] of Object.entries(current.js)) { if (!/common\.[A-Z0-9]{8}/.test(name)) clientJs.push(`m.js['${name}']='${info.hash}';`); @@ -85,7 +118,9 @@ async function write() { for (const [name, info] of Object.entries(current.css)) { clientJs.push(`m.css['${name}']='${info.hash}';`); } - + for (const [path, info] of Object.entries(current.hashed)) { + clientJs.push(`m.hashed[${JSON.stringify(path)}]='${info.hash}';`); + } const hashable = clientJs.join('\n'); const hash = crypto.createHash('sha256').update(hashable).digest('hex').slice(0, 8); // add the date after hashing @@ -94,7 +129,11 @@ async function write() { `\nwindow.site.info.date='${ new Date(new Date().toUTCString()).toISOString().split('.')[0] + '+00:00' }';\n`; - const serverManifest = { js: { manifest: { hash }, ...current.js }, css: { ...current.css } }; + const serverManifest = { + js: { manifest: { hash }, ...current.js }, + css: { ...current.css }, + hashed: { ...current.hashed }, + }; await Promise.all([ fs.promises.writeFile(path.join(env.jsDir, `manifest.${hash}.js`), clientManifest), @@ -107,7 +146,7 @@ async function write() { env.log(`Manifest hash ${c.green(hash)}`); } -async function hashMove(src: string) { +async function hashMoveCss(src: string) { const content = await fs.promises.readFile(src, 'utf-8'); const hash = crypto.createHash('sha256').update(content).digest('hex').slice(0, 8); const basename = path.basename(src, '.css'); @@ -118,6 +157,19 @@ async function hashMove(src: string) { return { name: path.basename(src, '.css'), hash }; } +async function hashLink(name: string) { + const src = path.join(env.outDir, name); + const hash = + crypto + .createHash('sha256') + .update(await fs.promises.readFile(src)) + .digest('base64url') + .slice(0, 8) + path.extname(src); + const link = path.join(env.hashDir, hash); + fs.promises.symlink(path.join('..', name), link).catch(() => {}); + return { name, hash }; +} + async function isComplete() { for (const bundle of [...env.modules.values()].map(x => x.bundles ?? []).flat()) { const name = path.basename(bundle, '.ts'); diff --git a/ui/.build/src/monitor.ts b/ui/.build/src/monitor.ts index 96b7ca5375cc..5f7460410ecd 100644 --- a/ui/.build/src/monitor.ts +++ b/ui/.build/src/monitor.ts @@ -23,8 +23,8 @@ export function stopMonitor() { export async function startMonitor(mods: string[]) { if (!env.watch) return; - const typePkgs = await globArray('*/package.json', { cwd: env.typesDir, abs: true }); - const typings = await globArray('*/*.d.ts', { cwd: env.typesDir, abs: true }); + const typePkgs = await globArray('*/package.json', { cwd: env.typesDir }); + const typings = await globArray('*/*.d.ts', { cwd: env.typesDir }); const tscChange = (t: any) => { if (reinitTimeout) return; stopTsc(); diff --git a/ui/.build/src/parse.ts b/ui/.build/src/parse.ts index cfa9a2445f79..baf9f3f40188 100644 --- a/ui/.build/src/parse.ts +++ b/ui/.build/src/parse.ts @@ -3,7 +3,7 @@ import * as path from 'node:path'; import * as fg from 'fast-glob'; import { LichessModule, env, colors as c } from './main'; -export const parseModules = async (): Promise<[Map, Map]> => { +export async function parseModules(): Promise<[Map, Map]> { const modules = new Map(); const moduleDeps = new Map(); @@ -20,18 +20,22 @@ export const parseModules = async (): Promise<[Map, Map { +export async function globArray(glob: string, opts: fg.Options = {}): Promise { const files: string[] = []; - for await (const f of fg.stream(glob, { cwd, absolute: abs, onlyFiles: !dirs })) + for await (const f of fg.stream(glob, { cwd: env.uiDir, absolute: true, onlyFiles: true, ...opts })) { files.push(f.toString('utf8')); + } return files; } +export async function globArrays(globs: string[] | undefined, opts: fg.Options = {}): Promise { + if (!globs) return []; + const globResults = await Promise.all(globs.map(g => globArray(g, opts))); + return [...new Set(globResults.flat())]; +} + async function parseModule(moduleDir: string): Promise { const pkg = JSON.parse(await fs.promises.readFile(path.join(moduleDir, 'package.json'), 'utf8')); const mod: LichessModule = { @@ -43,6 +47,8 @@ async function parseModule(moduleDir: string): Promise { hasTsconfig: fs.existsSync(path.join(moduleDir, 'tsconfig.json')), }; + if ('lichess' in pkg && 'hashed' in pkg.lichess) mod.hashGlobs = pkg.lichess.hashed as string[]; + if ('lichess' in pkg && 'bundles' in pkg.lichess) { if (typeof pkg.lichess.bundles === 'string') mod.bundles = [pkg.lichess.bundles]; else mod.bundles = pkg.lichess.bundles as string[]; diff --git a/ui/.build/src/sass.ts b/ui/.build/src/sass.ts index cc6bae625e31..107853fab522 100644 --- a/ui/.build/src/sass.ts +++ b/ui/.build/src/sass.ts @@ -5,7 +5,7 @@ import * as path from 'node:path'; import clr from 'tinycolor2'; import { env, colors as c, lines, errorMark } from './main'; import { globArray } from './parse'; -import { css as cssManifest } from './manifest'; +import { cssManifest } from './manifest'; const colorMixMap = new Map(); const themeColorMap = new Map>(); @@ -44,9 +44,7 @@ export async function sass(): Promise { } export async function allSources(): Promise { - return [ - ...new Set((await globArray('./*/css/**/[^_]*.scss', { abs: false })).filter(x => !x.includes('/gen/'))), - ]; + return (await globArray('./*/css/**/[^_]*.scss', { absolute: false })).filter(x => !x.includes('/gen/')); } async function unbuiltSources(): Promise { @@ -130,7 +128,7 @@ async function parseScss(src: string) { // collect mixable scss color definitions from theme files async function parseThemeColorDefs() { - const themeFiles = await globArray('./common/css/theme/_*.scss', { abs: false }); + const themeFiles = await globArray('./common/css/theme/_*.scss', { absolute: false }); const themes: string[] = ['dark']; for (const themeFile of themeFiles ?? []) { const theme = /_([^/]+)\.scss/.exec(themeFile)?.[1]; @@ -308,7 +306,7 @@ class SassWatch { if (event === 'change') { if (this.add([path.join(dir, srcFile)])) env.log(`File '${c.cyanBold(srcFile)}' changed`); } else if (event === 'rename') { - globArray('*.scss', { cwd: dir, abs: false }).then(files => { + globArray('*.scss', { cwd: dir, absolute: false }).then(files => { if (this.add(files.map(f => path.join(dir, f)))) { env.log(`Cross your fingers - directory '${c.cyanBold(dir)}' changed`, { ctx: 'sass' }); } diff --git a/ui/@types/lichess/index.d.ts b/ui/@types/lichess/index.d.ts index 2551235b672b..096df16e7f06 100644 --- a/ui/@types/lichess/index.d.ts +++ b/ui/@types/lichess/index.d.ts @@ -81,7 +81,7 @@ interface Site { socket: any; quietMode?: boolean; analysis?: any; // expose the analysis ctrl - manifest: { css: Record; js: Record }; + manifest: { css: Record; js: Record; hashed: Record }; } interface EsmModuleOpts extends AssetUrlOpts { @@ -175,7 +175,7 @@ interface SoundI { sayOrPlay(name: string, text: string): void; preloadBoardSounds(): void; theme: string; - baseUrl: string; + url(name: string): string; } interface LichessSpeech { diff --git a/ui/analyse/src/study/practice/studyPracticeCtrl.ts b/ui/analyse/src/study/practice/studyPracticeCtrl.ts index fbbb7120144c..d41f3a4cb44f 100644 --- a/ui/analyse/src/study/practice/studyPracticeCtrl.ts +++ b/ui/analyse/src/study/practice/studyPracticeCtrl.ts @@ -20,8 +20,8 @@ export default class StudyPractice { readonly data: StudyPracticeData, ) { this.goal = prop(root.data.practiceGoal!); - site.sound.load('practiceSuccess', `${site.sound.baseUrl}/other/energy3`); - site.sound.load('practiceFailure', `${site.sound.baseUrl}/other/failure2`); + site.sound.load('practiceSuccess', site.sound.url('other/energy3.mp3')); + site.sound.load('practiceFailure', site.sound.url('other/failure2.mp3')); this.onLoad(); } diff --git a/ui/bits/src/bits.soundMove.ts b/ui/bits/src/bits.soundMove.ts index 32226f4d652a..1027db9ec6ae 100644 --- a/ui/bits/src/bits.soundMove.ts +++ b/ui/bits/src/bits.soundMove.ts @@ -26,7 +26,7 @@ export async function initModule(): Promise { const load = async (instrument: string, index: number, filename: string) => site.sound.load( `orchestra.${instrument}.${index}`, - `${site.sound.baseUrl}/instrument/${instrument}/${filename}`, + site.sound.url(`instrument/${instrument}/${filename}`), ); const isPawn = (san: string) => san[0] === san[0].toLowerCase(); @@ -43,10 +43,10 @@ export async function initModule(): Promise { const promises = []; for (const inst of ['celesta', 'clav']) { for (let i = 1; i <= 24; i++) { - promises.push(load(inst, i - 1, 'c' + `${i}`.padStart(3, '0'))); + promises.push(load(inst, i - 1, 'c' + `${i}.mp3`.padStart(7, '0'))); } } - for (let i = 1; i <= 3; i++) promises.push(load('swells', i - 1, `swell${i}`)); + for (let i = 1; i <= 3; i++) promises.push(load('swells', i - 1, `swell${i}.mp3`)); await Promise.all(promises); diff --git a/ui/dasher/src/background.ts b/ui/dasher/src/background.ts index 033575fc440f..7cb42d743f1e 100644 --- a/ui/dasher/src/background.ts +++ b/ui/dasher/src/background.ts @@ -144,7 +144,7 @@ export class BackgroundCtrl extends PaneCtrl { const gallery = this.data.gallery!; const cols = window.matchMedia('(min-width: 650px)').matches ? 4 : 2; - const montageUrl = site.asset.url(gallery[`montage${cols}`], { version: false }); + const montageUrl = site.asset.url(gallery[`montage${cols}`]); const width = cols * (160 + 2) + (gallery.images.length > cols * 4 ? elementScrollBarWidthSlowGuess() : 0); diff --git a/ui/learn/src/sound.ts b/ui/learn/src/sound.ts index 84858f3f642b..96149d8d2c6f 100644 --- a/ui/learn/src/sound.ts +++ b/ui/learn/src/sound.ts @@ -1,6 +1,6 @@ -const make = (file: string, volume?: number) => { - site.sound.load(file, `${site.sound.baseUrl}/${file}`); - return () => site.sound.play(file, volume); +const make = (name: string, volume?: number) => { + site.sound.load(name, site.sound.url(`${name}.mp3`)); + return () => site.sound.play(name, volume); }; export const move = () => site.sound.play('move'); diff --git a/ui/puz/src/util.ts b/ui/puz/src/util.ts index dfc1b9466d3d..39eaaa1ade8f 100644 --- a/ui/puz/src/util.ts +++ b/ui/puz/src/util.ts @@ -6,9 +6,9 @@ export const getNow = (): number => Math.round(performance.now()); export const puzzlePov = (puzzle: Puzzle) => opposite(parseFen(puzzle.fen).unwrap().turn); -const loadSound = (file: string, volume?: number, delay?: number) => { - setTimeout(() => site.sound.load(file, `${site.sound.baseUrl}/${file}`), delay || 1000); - return () => site.sound.play(file, volume); +const loadSound = (name: string, volume?: number, delay?: number) => { + setTimeout(() => site.sound.load(name, site.sound.url(`${name}.mp3`)), delay || 1000); + return () => site.sound.play(name, volume); }; export const sound = { diff --git a/ui/puzzle/src/ctrl.ts b/ui/puzzle/src/ctrl.ts index b1ddd68e86cc..add86b94b914 100755 --- a/ui/puzzle/src/ctrl.ts +++ b/ui/puzzle/src/ctrl.ts @@ -112,9 +112,9 @@ export default class PuzzleCtrl implements ParentCtrl { $('#zentog').on('click', () => site.pubsub.emit('zen')); } - private loadSound = (file: string, volume?: number) => { - site.sound.load(file, `${site.sound.baseUrl}/${file}`); - return () => site.sound.play(file, volume); + private loadSound = (name: string, volume?: number) => { + site.sound.load(name, site.sound.url(`${name}.mp3`)); + return () => site.sound.play(name, volume); }; sound = { good: this.loadSound('lisp/PuzzleStormGood', 0.7), diff --git a/ui/site/package.json b/ui/site/package.json index a7813d0ae36d..39de13108f17 100644 --- a/ui/site/package.json +++ b/ui/site/package.json @@ -23,6 +23,11 @@ ], "sync": { "node_modules/dialog-polyfill/dist/dialog-polyfill.esm.js": "public/npm" - } + }, + "hashed": [ + "font/lichess.woff", + "font/lichess.woff2", + "lifat/background/montage*.webp" + ] } } diff --git a/ui/site/src/asset.ts b/ui/site/src/asset.ts index fb9f07087a18..e0d3f7ab3507 100644 --- a/ui/site/src/asset.ts +++ b/ui/site/src/asset.ts @@ -7,8 +7,9 @@ const assetVersion = memoize(() => document.body.getAttribute('data-asset-versio export const url = (path: string, opts: AssetUrlOpts = {}) => { const base = opts.documentOrigin ? window.location.origin : opts.pathOnly ? '' : baseUrl(); - const version = opts.version === false ? '' : `/_${opts.version ?? assetVersion()}`; - return `${base}/assets${version}/${path}`; + const version = opts.version === false ? '' : `_${opts.version ?? assetVersion()}/`; + const hashed = opts.version !== false && site.manifest.hashed[path]; + return `${base}/assets/${hashed ? `hashed/${hashed}` : `${version}${path}`}`; }; // bump flairs version if a flair is changed only (not added or removed) diff --git a/ui/site/src/sound.ts b/ui/site/src/sound.ts index ab239c4c25d1..5545a7859caa 100644 --- a/ui/site/src/sound.ts +++ b/ui/site/src/sound.ts @@ -15,7 +15,6 @@ export default new (class implements SoundI { theme = document.body.dataset.soundSet!; speechStorage = storage.boolean('speech.enabled'); volumeStorage = storage.make('sound-volume'); - baseUrl = assetUrl('sound', { version: '_____1' }); music?: SoundMove; primerEvents = ['touchend', 'pointerup', 'pointerdown', 'mousedown', 'keydown']; primer = () => @@ -35,8 +34,8 @@ export default new (class implements SoundI { if (!path) return; if (this.sounds.has(path)) return this.sounds.get(path); - const result = await fetch(`${path}.mp3`); - if (!result.ok) throw new Error(`${path}.mp3 failed ${result.status}`); + const result = await fetch(path); + if (!result.ok) throw new Error(`${path} failed ${result.status}`); const arrayBuffer = await result.arrayBuffer(); const audioBuffer = await new Promise((resolve, reject) => { @@ -56,7 +55,11 @@ export default new (class implements SoundI { if (['move', 'capture', 'check'].includes(name)) return; dir = 'standard'; } - return `${this.baseUrl}/${dir}/${name[0].toUpperCase() + name.slice(1)}`; + return this.url(`${dir}/${name[0].toUpperCase() + name.slice(1)}.mp3`); + } + + url(name: Name): string { + return assetUrl(`sound/${name}`, { version: '_____1' }); } async play(name: Name, volume = 1): Promise { From e3fafb252e140f33418fb1cc492ca55f3118cb6d Mon Sep 17 00:00:00 2001 From: Jonathan Gamble Date: Sun, 14 Jul 2024 11:10:44 -0500 Subject: [PATCH 16/30] rename bits/src "load" -> "exports" to clarify purpose --- pnpm-lock.yaml | 3 ++ ui/analyse/package.json | 1 + ui/analyse/src/study/studyForm.ts | 2 +- ui/analyse/tsconfig.json | 1 + ui/bits/package.json | 4 +- ui/bits/src/bits.account.ts | 2 +- ui/bits/src/bits.coachForm.ts | 2 +- ui/bits/src/bits.cropDialog.ts | 12 +++--- ui/bits/src/bits.dailyFeed.ts | 2 +- ui/bits/src/bits.relayForm.ts | 2 +- ui/bits/src/bits.streamer.ts | 2 +- ui/bits/src/bits.team.ts | 2 +- ui/bits/src/bits.titleRequest.ts | 2 +- ui/bits/src/bits.ublogForm.ts | 2 +- ui/bits/src/exports/crop.ts | 38 ++++++++++++++++++ .../src => bits/src/exports}/flairPicker.ts | 0 ui/bits/src/load/crop.ts | 40 ------------------- ui/bits/tsconfig.json | 1 + 18 files changed, 61 insertions(+), 57 deletions(-) create mode 100644 ui/bits/src/exports/crop.ts rename ui/{common/src => bits/src/exports}/flairPicker.ts (100%) delete mode 100644 ui/bits/src/load/crop.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 95c754e12eb6..25c824e088ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -79,6 +79,9 @@ importers: '@yaireo/tagify': specifier: 4.17.9 version: 4.17.9(prop-types@15.8.1) + bits: + specifier: workspace:* + version: link:../bits ceval: specifier: workspace:* version: link:../ceval diff --git a/ui/analyse/package.json b/ui/analyse/package.json index 584955b8eb68..4c9af866ad32 100644 --- a/ui/analyse/package.json +++ b/ui/analyse/package.json @@ -19,6 +19,7 @@ "@types/sortablejs": "^1.15.8", "@types/yaireo__tagify": "4.17.5", "@yaireo/tagify": "4.17.9", + "bits": "workspace:*", "ceval": "workspace:*", "chart": "workspace:*", "chat": "workspace:*", diff --git a/ui/analyse/src/study/studyForm.ts b/ui/analyse/src/study/studyForm.ts index fa04021cb3a8..b7f54efcbbe4 100644 --- a/ui/analyse/src/study/studyForm.ts +++ b/ui/analyse/src/study/studyForm.ts @@ -2,7 +2,7 @@ import { VNode } from 'snabbdom'; import * as licon from 'common/licon'; import { prop } from 'common'; import { snabDialog } from 'common/dialog'; -import flairPickerLoader from 'common/flairPicker'; +import flairPickerLoader from 'bits/flairPicker'; import { bindSubmit, bindNonPassive, onInsert, looseH as h } from 'common/snabbdom'; import { emptyRedButton } from '../view/util'; import { StudyData } from './interfaces'; diff --git a/ui/analyse/tsconfig.json b/ui/analyse/tsconfig.json index 020b79dc6371..3d347dcb1b84 100644 --- a/ui/analyse/tsconfig.json +++ b/ui/analyse/tsconfig.json @@ -5,6 +5,7 @@ "noEmit": true }, "references": [ + { "path": "../bits/tsconfig.json" }, { "path": "../ceval/tsconfig.json" }, { "path": "../chart/tsconfig.json" }, { "path": "../chat/tsconfig.json" }, diff --git a/ui/bits/package.json b/ui/bits/package.json index eb451c230115..2152a2834fd9 100644 --- a/ui/bits/package.json +++ b/ui/bits/package.json @@ -6,12 +6,12 @@ "author": "T-Bone Duplexus", "license": "AGPL-3.0-or-later", "exports": { - "./*": "./dist/load/*.js" + "./*": "./dist/exports/*.js" }, "typesVersions": { "*": { "*": [ - "dist/load/*" + "dist/exports/*" ] } }, diff --git a/ui/bits/src/bits.account.ts b/ui/bits/src/bits.account.ts index 411af0f1d483..69c6d0bd927d 100644 --- a/ui/bits/src/bits.account.ts +++ b/ui/bits/src/bits.account.ts @@ -1,7 +1,7 @@ import * as licon from 'common/licon'; import * as xhr from 'common/xhr'; import { addPasswordVisibilityToggleListener } from 'common/password'; -import flairPickerLoader from 'common/flairPicker'; +import flairPickerLoader from './exports/flairPicker'; site.load.then(() => { $('.emoji-details').each(function (this: HTMLElement) { diff --git a/ui/bits/src/bits.coachForm.ts b/ui/bits/src/bits.coachForm.ts index 62f0d8b19682..13385720fd5e 100644 --- a/ui/bits/src/bits.coachForm.ts +++ b/ui/bits/src/bits.coachForm.ts @@ -3,7 +3,7 @@ import * as xhr from 'common/xhr'; import { isSafari } from 'common/device'; import { notNull } from 'common'; import Tagify from '@yaireo/tagify'; -import { wireCropDialog } from './load/crop'; +import { wireCropDialog } from './exports/crop'; if (isSafari()) wireCropDialog(); // preload diff --git a/ui/bits/src/bits.cropDialog.ts b/ui/bits/src/bits.cropDialog.ts index 1274626fd30a..ad3aaf3d140d 100644 --- a/ui/bits/src/bits.cropDialog.ts +++ b/ui/bits/src/bits.cropDialog.ts @@ -3,9 +3,9 @@ import { domDialog } from 'common/dialog'; import Cropper from 'cropperjs'; export interface CropOpts { - aspectRatio: number; // required + aspectRatio?: number; source?: Blob | string; // image or url - max: { megabytes: number; pixels?: number }; // constrain size + max?: { megabytes?: number; pixels?: number }; // constrain size post?: { url: string; field?: string }; // multipart post form url and field name onCropped?: (result: Blob | boolean, error?: string) => void; // result callback } @@ -66,9 +66,9 @@ export async function initModule(o?: CropOpts) { class: 'crop-viewer', css: [{ hashed: 'bits.cropDialog' }, { url: 'npm/cropper.min.css' }], htmlText: `

Crop image to desired shape

-
- -`, +
+ + `, append: [{ where: '.crop-view', node: container }], actions: [ { selector: '.dialog-actions > .cancel', listener: (_, d) => d.close() }, @@ -95,7 +95,7 @@ export async function initModule(o?: CropOpts) { const tryQuality = (quality = 0.9) => { canvas.toBlob( blob => { - if (blob && blob.size < opts.max.megabytes * 1024 * 1024) submit(blob); + if (blob && blob.size < (opts.max?.megabytes ?? 100) * 1024 * 1024) submit(blob); else if (blob && quality > 0.05) tryQuality(quality * 0.9); else submit(false, 'Rendering failed'); }, diff --git a/ui/bits/src/bits.dailyFeed.ts b/ui/bits/src/bits.dailyFeed.ts index 868202ec6206..e1af8176fa42 100644 --- a/ui/bits/src/bits.dailyFeed.ts +++ b/ui/bits/src/bits.dailyFeed.ts @@ -1,4 +1,4 @@ -import flairPickerLoader from 'common/flairPicker'; +import flairPickerLoader from './exports/flairPicker'; $('.emoji-details').each(function (this: HTMLElement) { flairPickerLoader(this); diff --git a/ui/bits/src/bits.relayForm.ts b/ui/bits/src/bits.relayForm.ts index 3c1b2b7a63d1..1ec84841ba9f 100644 --- a/ui/bits/src/bits.relayForm.ts +++ b/ui/bits/src/bits.relayForm.ts @@ -1,4 +1,4 @@ -import { wireCropDialog } from './load/crop'; +import { wireCropDialog } from './exports/crop'; site.load.then(() => { wireCropDialog({ diff --git a/ui/bits/src/bits.streamer.ts b/ui/bits/src/bits.streamer.ts index 9878758d88ea..a4a0f5660176 100644 --- a/ui/bits/src/bits.streamer.ts +++ b/ui/bits/src/bits.streamer.ts @@ -1,5 +1,5 @@ import * as xhr from 'common/xhr'; -import { wireCropDialog } from './load/crop'; +import { wireCropDialog } from './exports/crop'; site.load.then(() => { $('.streamer-show, .streamer-list').on('change', '.streamer-subscribe input', (e: Event) => { diff --git a/ui/bits/src/bits.team.ts b/ui/bits/src/bits.team.ts index 376f70ea1288..57847ee02715 100644 --- a/ui/bits/src/bits.team.ts +++ b/ui/bits/src/bits.team.ts @@ -1,5 +1,5 @@ import * as xhr from 'common/xhr'; -import flairPickerLoader from 'common/flairPicker'; +import flairPickerLoader from './exports/flairPicker'; interface TeamOpts { id: string; diff --git a/ui/bits/src/bits.titleRequest.ts b/ui/bits/src/bits.titleRequest.ts index 47502adee7a9..6a0670b9db04 100644 --- a/ui/bits/src/bits.titleRequest.ts +++ b/ui/bits/src/bits.titleRequest.ts @@ -1,4 +1,4 @@ -import { wireCropDialog } from './load/crop'; +import { wireCropDialog } from './exports/crop'; site.load.then(() => { $('.title-image-edit').each(function (this: HTMLElement) { diff --git a/ui/bits/src/bits.ublogForm.ts b/ui/bits/src/bits.ublogForm.ts index 6f9c9dbdee5c..6fa15e3be82c 100644 --- a/ui/bits/src/bits.ublogForm.ts +++ b/ui/bits/src/bits.ublogForm.ts @@ -3,7 +3,7 @@ import throttle from 'common/throttle'; import Editor from '@toast-ui/editor'; import Tagify from '@yaireo/tagify'; import { currentTheme } from 'common/theme'; -import { wireCropDialog } from './load/crop'; +import { wireCropDialog } from './exports/crop'; site.load.then(() => { $('.markdown-editor').each(function (this: HTMLTextAreaElement) { diff --git a/ui/bits/src/exports/crop.ts b/ui/bits/src/exports/crop.ts new file mode 100644 index 000000000000..aed585603387 --- /dev/null +++ b/ui/bits/src/exports/crop.ts @@ -0,0 +1,38 @@ +import { isSafari } from 'common/device'; +import { type CropOpts } from '../bits.cropDialog'; +export { type CropOpts } from '../bits.cropDialog'; + +export function wireCropDialog( + opts?: CropOpts & { + selectClicks?: Cash; + selectDrags?: Cash; + }, +) { + if (!opts) { + site.asset.loadEsm('bits.cropDialog'); // preload + return; + } + const init = structuredClone(opts); + + if (!init.onCropped) init.onCropped = () => site.reload(); + + init.max = { ...(init.max || {}), megabytes: 6 }; // nginx `client_max_body_size` + + init.selectClicks?.on('click', () => site.asset.loadEsm('bits.cropDialog', { init })); + + init.selectDrags?.on('dragover', e => e.preventDefault()); + + init.selectDrags?.on('drop', e => { + e.preventDefault(); + + for (const item of e.dataTransfer.items) { + if (item.kind === 'file' && item.type.startsWith('image/')) init.source = item.getAsFile(); + else if (item.type === 'text/uri-list') item.getAsString((uri: string) => (init.source = uri)); + else continue; + + if (init.source) return site.asset.loadEsm('bits.cropDialog', { init }); + } + }); +} + +if (isSafari()) wireCropDialog(); // preload diff --git a/ui/common/src/flairPicker.ts b/ui/bits/src/exports/flairPicker.ts similarity index 100% rename from ui/common/src/flairPicker.ts rename to ui/bits/src/exports/flairPicker.ts diff --git a/ui/bits/src/load/crop.ts b/ui/bits/src/load/crop.ts deleted file mode 100644 index ec8cb8633de0..000000000000 --- a/ui/bits/src/load/crop.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { isSafari } from 'common/device'; -import { type CropOpts as Params } from '../bits.cropDialog'; -export { type CropOpts } from '../bits.cropDialog'; - -export function wireCropDialog(args?: { - aspectRatio?: number; - selectClicks?: Cash; - selectDrags?: Cash; - max?: { megabytes?: number; pixels?: number }; - post?: { url: string; field?: string }; - onCropped?: (result: Blob | boolean) => void; -}) { - if (!args) { - site.asset.loadEsm('bits.cropDialog'); // preload - return; - } - const cropOpts = { ...args }; - if (!cropOpts.onCropped) cropOpts.onCropped = () => site.reload(); - cropOpts.max = { ...(cropOpts.max || {}), megabytes: 6 }; // mirrors the nginx config `client_max_body_size` - cropOpts.selectClicks?.on('click', () => site.asset.loadEsm('bits.cropDialog', { init: cropOpts })); - cropOpts.selectDrags?.on('dragover', e => e.preventDefault()); - cropOpts.selectDrags?.on('drop', e => { - e.preventDefault(); - const init = { ...cropOpts } as Params; - for (const item of e.dataTransfer.items) { - if (item.kind === 'file' && item.type.startsWith('image/')) { - init.source = item.getAsFile(); - } else if (item.type === 'text/uri-list') { - item.getAsString((uri: string) => (init.source = uri)); - } else continue; - - if (init.source) { - site.asset.loadEsm('bits.cropDialog', { init }); - break; - } - } - }); -} - -if (isSafari()) wireCropDialog(); // preload diff --git a/ui/bits/tsconfig.json b/ui/bits/tsconfig.json index 85cdc1ad1413..0edb4426d493 100644 --- a/ui/bits/tsconfig.json +++ b/ui/bits/tsconfig.json @@ -7,6 +7,7 @@ "skipLibCheck": true, "noImplicitReturns": false, "declaration": true, + "composite": true, "allowJs": true }, "references": [ From bd2254884e221661ed509407aaaf087e8acc7be5 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sun, 14 Jul 2024 16:20:52 +0000 Subject: [PATCH 17/30] Update scaffeine to 5.3.0 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index e0958cd94b4a..d562037c9cb1 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -19,7 +19,7 @@ object Dependencies { val compression = "org.lichess" %% "compression" % "1.10" val maxmind = "com.maxmind.geoip2" % "geoip2" % "4.0.1" val caffeine = "com.github.ben-manes.caffeine" % "caffeine" % "3.1.8" % "compile" - val scaffeine = "com.github.blemale" %% "scaffeine" % "5.2.1" % "compile" + val scaffeine = "com.github.blemale" %% "scaffeine" % "5.3.0" % "compile" val googleOAuth = "com.google.auth" % "google-auth-library-oauth2-http" % "1.24.0" val galimatias = "io.mola.galimatias" % "galimatias" % "0.2.2-NF" val scalatags = "com.lihaoyi" %% "scalatags" % "0.13.1" From 494cd841a34171da0e95a0bfd7cfd4dd5867bfbc Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sun, 14 Jul 2024 16:21:18 +0000 Subject: [PATCH 18/30] Update scala3-library to 3.5.0-RC4 --- project/BuildSettings.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/BuildSettings.scala b/project/BuildSettings.scala index 51533c29f806..5b72dec6c9f5 100644 --- a/project/BuildSettings.scala +++ b/project/BuildSettings.scala @@ -6,7 +6,7 @@ object BuildSettings { import Dependencies._ val lilaVersion = "4.0" - val globalScalaVersion = "3.5.0-RC3" + val globalScalaVersion = "3.5.0-RC4" def buildSettings = Defaults.coreDefaultSettings ++ Seq( From 54ca5e7f832fabfa813f8b432c427f8b1087e419 Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Thu, 14 Mar 2024 14:35:19 +0700 Subject: [PATCH 19/30] Add scalafix plugin --- project/BuildSettings.scala | 7 ++++--- project/plugins.sbt | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/project/BuildSettings.scala b/project/BuildSettings.scala index 5b72dec6c9f5..d6e1a3cb90d1 100644 --- a/project/BuildSettings.scala +++ b/project/BuildSettings.scala @@ -18,7 +18,8 @@ object BuildSettings { version := lilaVersion, Compile / doc / sources := Seq.empty, Compile / packageDoc / publishArtifact := false, - Compile / packageSrc / publishArtifact := false + Compile / packageSrc / publishArtifact := false, + semanticdbEnabled := true // for scalafix ) lazy val defaultLibs: Seq[ModuleID] = @@ -54,8 +55,8 @@ object BuildSettings { "-feature", "-language:postfixOps", "-language:implicitConversions", - "-release:21" - // "-Wunused:all", + "-release:21", + "-Wunused:all" ) val srcMain = Seq( diff --git a/project/plugins.sbt b/project/plugins.sbt index 75e07618a341..c2dcdd13c954 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -5,3 +5,4 @@ resolvers += Resolver.url( addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.18-lila_1.25") // scala2 branch addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.6.0") +addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.12.1") From 23d1d88c7832ca6d3ff15e86f29b34601ea7cb76 Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Mon, 15 Jul 2024 10:35:47 +0700 Subject: [PATCH 20/30] Fix warning with scalafix in lila module --- app/views/team/tournaments.scala | 2 -- app/views/ublog.scala | 2 +- app/views/ui.scala | 2 -- app/views/user/mod.scala | 8 +------- app/views/user/show/page.scala | 8 ++++---- modules/api/src/main/PgnDump.scala | 1 - 6 files changed, 6 insertions(+), 17 deletions(-) diff --git a/app/views/team/tournaments.scala b/app/views/team/tournaments.scala index 1ef1f74b7349..4a6cdd784606 100644 --- a/app/views/team/tournaments.scala +++ b/app/views/team/tournaments.scala @@ -1,7 +1,5 @@ package views.team -import play.api.i18n.Lang - import lila.app.mashup.TeamInfo import lila.app.UiEnv.{ *, given } diff --git a/app/views/ublog.scala b/app/views/ublog.scala index 83c886ae9b17..41a03b88a8ec 100644 --- a/app/views/ublog.scala +++ b/app/views/ublog.scala @@ -2,7 +2,7 @@ package views.ublog import scalalib.paginator.Paginator -import lila.app.UiEnv.{ *, given } +import lila.app.UiEnv. * import lila.i18n.LangList import lila.core.i18n.Language import lila.ublog.UblogPost diff --git a/app/views/ui.scala b/app/views/ui.scala index 44f414f3410f..b81695dd71a1 100644 --- a/app/views/ui.scala +++ b/app/views/ui.scala @@ -1,8 +1,6 @@ package views import lila.app.UiEnv.{ *, given } -import lila.cms.CmsPage - export lila.web.ui.bits val captcha = lila.web.ui.CaptchaUi(helpers) diff --git a/app/views/user/mod.scala b/app/views/user/mod.scala index 2fe0896e78c5..43b3f3037777 100644 --- a/app/views/user/mod.scala +++ b/app/views/user/mod.scala @@ -1,22 +1,16 @@ package views.user -import play.api.i18n.Lang - import lila.app.UiEnv.{ *, given } import lila.appeal.Appeal -import lila.evaluation.Display import lila.mod.IpRender.RenderIp -import lila.mod.{ ModPresets, UserWithModlog } +import lila.mod. UserWithModlog import lila.mod.ui.ModUserTableUi -import lila.core.playban.RageSit import lila.security.{ Dated, UserAgentParser, UserClient, UserLogins } -import lila.core.perm.Permission import lila.core.i18n.Translate object mod: - import views.mod.userTable import views.mod.user.* import views.mod.{ user as ui } diff --git a/app/views/user/show/page.scala b/app/views/user/show/page.scala index 1bb2ddc24edc..7c0c4a99872d 100644 --- a/app/views/user/show/page.scala +++ b/app/views/user/show/page.scala @@ -6,7 +6,7 @@ import play.api.data.Form import lila.app.mashup.UserInfo import lila.app.UiEnv.{ *, given } -import lila.game.{ Game, GameFilter } +import lila.game.GameFilter import lila.core.data.SafeJsonStr import lila.rating.UserWithPerfs.titleUsernameWithBestRating @@ -34,7 +34,7 @@ object page: ) ) .js(pageModule(info)) - .js(esModules(info)) + .js(esModules()) .css("bits.user.show") .css(isGranted(_.UserModView).option("mod.user")) .robots(u.count.game >= 10): @@ -59,7 +59,7 @@ object page: val pageName = (games.currentPage > 1).so(s" - page ${games.currentPage}") Page(s"${u.username} $filterName$pageName") .js(pageModule(info)) - .js(esModules(info, filters.current.name == "search")) + .js(esModules(filters.current.name == "search")) .css("bits.user.show") .css((filters.current.name == "search").option("bits.user.show.search")) .css(isGranted(_.UserModView).option("mod.user")) @@ -74,7 +74,7 @@ object page: ) ) - private def esModules(info: UserInfo, withSearch: Boolean = false)(using Context): EsmList = + private def esModules(withSearch: Boolean = false)(using Context): EsmList = import play.api.libs.json.Json infiniteScrollEsmInit ++ jsModuleInit("bits.user", Json.obj("i18n" -> i18nJsObject(ui.i18nKeys))) diff --git a/modules/api/src/main/PgnDump.scala b/modules/api/src/main/PgnDump.scala index 22ec11838ff1..0dd9188b0a85 100644 --- a/modules/api/src/main/PgnDump.scala +++ b/modules/api/src/main/PgnDump.scala @@ -6,7 +6,6 @@ import chess.format.Fen import play.api.i18n.Lang import lila.analyse.{ Analysis, Annotator } -import lila.game.Game import lila.game.PgnDump.WithFlags import lila.team.GameTeams import lila.core.i18n.Translate From 06cb92f24ed55428e95caf4dc2838f1ef91933f0 Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Mon, 15 Jul 2024 10:40:59 +0700 Subject: [PATCH 21/30] Remove unused imports in core module --- modules/core/src/main/LightUser.scala | 2 -- modules/core/src/main/chess.scala | 2 -- modules/core/src/main/forum.scala | 1 - modules/core/src/main/game/Game.scala | 7 +------ modules/core/src/main/game/NewGame.scala | 6 ++---- modules/core/src/main/game/Player.scala | 2 +- modules/core/src/main/game/data.scala | 1 - modules/core/src/main/game/light.scala | 2 +- modules/core/src/main/game/misc.scala | 20 +++---------------- .../main/lilaism/LilaLibraryExtensions.scala | 1 - modules/core/src/main/misc.scala | 3 --- modules/core/src/main/perf.scala | 1 - modules/core/src/main/round.scala | 2 -- modules/core/src/main/security.scala | 2 +- modules/core/src/main/team.scala | 2 -- 15 files changed, 9 insertions(+), 45 deletions(-) diff --git a/modules/core/src/main/LightUser.scala b/modules/core/src/main/LightUser.scala index 10c35038fdba..a43178b34b5d 100644 --- a/modules/core/src/main/LightUser.scala +++ b/modules/core/src/main/LightUser.scala @@ -1,8 +1,6 @@ package lila.core import _root_.chess.PlayerTitle -import play.api.libs.json.* - import lila.core.userId.* import lila.core.id.Flair import scala.concurrent.ExecutionContext diff --git a/modules/core/src/main/chess.scala b/modules/core/src/main/chess.scala index 1e44ebc3b192..c4278053f25c 100644 --- a/modules/core/src/main/chess.scala +++ b/modules/core/src/main/chess.scala @@ -1,8 +1,6 @@ package lila.core package chess -import alleycats.Zero - opaque type Win = Boolean object Win extends YesNo[Win] diff --git a/modules/core/src/main/forum.scala b/modules/core/src/main/forum.scala index 3493b6e9a0d3..f32d28f3858e 100644 --- a/modules/core/src/main/forum.scala +++ b/modules/core/src/main/forum.scala @@ -3,7 +3,6 @@ package forum import lila.core.id.{ ForumCategId, ForumPostId, ForumTopicId, TeamId } import lila.core.userId.* -import lila.core.bus import reactivemongo.api.bson.Macros.Annotations.Key diff --git a/modules/core/src/main/game/Game.scala b/modules/core/src/main/game/Game.scala index b120971e5635..6ff0abf314e0 100644 --- a/modules/core/src/main/game/Game.scala +++ b/modules/core/src/main/game/Game.scala @@ -3,23 +3,18 @@ package game import scalalib.model.Days import _root_.chess.Color.{ Black, White } -import _root_.chess.MoveOrDrop.{ color, fold } import _root_.chess.format.pgn.SanStr -import _root_.chess.format.{ Fen, Uci } +import _root_.chess.format.Uci import _root_.chess.opening.{ Opening, OpeningDb } import _root_.chess.variant.{ FromPosition, Standard, Variant } import _root_.chess.{ ByColor, - Castles, Centis, - CheckCount, Clock, CorrespondenceClock, Color, Game as ChessGame, Mode, - MoveOrDrop, - Outcome, Ply, Speed, Status diff --git a/modules/core/src/main/game/NewGame.scala b/modules/core/src/main/game/NewGame.scala index ab5e14da8b30..baff85beb757 100644 --- a/modules/core/src/main/game/NewGame.scala +++ b/modules/core/src/main/game/NewGame.scala @@ -1,13 +1,11 @@ package lila.core package game -import scala.concurrent.ExecutionContext import scalalib.model.Days import scalalib.ThreadLocalRandom -import _root_.chess.{ Color, Mode, ByColor, Status, Game as ChessGame } +import _root_.chess.{ Mode, ByColor, Status, Game as ChessGame } -import lila.core.id.{ GameId, GamePlayerId } -import lila.core.user.WithPerf +import lila.core.id.GameId import _root_.chess.format.Fen case class ImportedGame(sloppy: Game, initialFen: Option[Fen.Full] = None): diff --git a/modules/core/src/main/game/Player.scala b/modules/core/src/main/game/Player.scala index 6e66f0808317..157064f7001c 100644 --- a/modules/core/src/main/game/Player.scala +++ b/modules/core/src/main/game/Player.scala @@ -1,7 +1,7 @@ package lila.core package game -import _root_.chess.{ ByColor, Color, Elo, PlayerName, Ply } +import _root_.chess.{ Color, PlayerName, Ply } import lila.core.id.GamePlayerId import lila.core.userId.{ UserId, UserIdOf } import lila.core.rating.data.{ IntRating, IntRatingDiff, RatingProvisional } diff --git a/modules/core/src/main/game/data.scala b/modules/core/src/main/game/data.scala index 9c63c8658197..649677735886 100644 --- a/modules/core/src/main/game/data.scala +++ b/modules/core/src/main/game/data.scala @@ -5,7 +5,6 @@ import _root_.chess.{ Centis, Clock, Color, Ply } import _root_.chess.format.pgn.PgnStr import lila.core.id.{ TourId, SwissId, SimulId } import lila.core.userId.UserId -import lila.core.rating.data.{ IntRating, IntRatingDiff, RatingProvisional } case class GameMetadata( source: Option[Source], diff --git a/modules/core/src/main/game/light.scala b/modules/core/src/main/game/light.scala index 11078a3dbc12..a51faf49241b 100644 --- a/modules/core/src/main/game/light.scala +++ b/modules/core/src/main/game/light.scala @@ -3,7 +3,7 @@ package game import _root_.chess.{ Color, Status } -import lila.core.id.{ GameId, GameFullId, GamePlayerId } +import lila.core.id.GameId import lila.core.userId.UserId import lila.core.rating.data.{ IntRating, IntRatingDiff, RatingProvisional } diff --git a/modules/core/src/main/game/misc.scala b/modules/core/src/main/game/misc.scala index 0bff73d70676..b1e6dab3dd70 100644 --- a/modules/core/src/main/game/misc.scala +++ b/modules/core/src/main/game/misc.scala @@ -3,32 +3,18 @@ package game import cats.derived.* import play.api.libs.json.* -import reactivemongo.api.bson.{ BSONHandler, BSONDocumentHandler, BSONDocument } +import reactivemongo.api.bson.{ BSONHandler, BSONDocumentHandler } import reactivemongo.api.bson.collection.BSONCollection import reactivemongo.akkastream.AkkaStreamCursor -import _root_.chess.{ - Color, - Clock, - ByColor, - Status, - Speed, - Ply, - Centis, - Replay, - ErrorStr, - Division, - Game as ChessGame -} +import _root_.chess.{ Color, Clock, ByColor, Status, Speed, Ply, Centis, Division } import _root_.chess.format.Fen -import _root_.chess.format.pgn.{ Pgn, PgnStr, SanStr, ParsedPgn, Tags } +import _root_.chess.format.pgn.{ Pgn, SanStr, ParsedPgn, Tags } import lila.core.id.{ GameId, GameFullId, GamePlayerId, TeamId } import lila.core.userId.UserId -import lila.core.rating.data.{ IntRating, IntRatingDiff, RatingProvisional } import lila.core.perf.UserWithPerfs import lila.core.user.User import _root_.chess.variant.Variant -import lila.core.userId.MyId import lila.core.perf.PerfKey val maxPlaying = Max(200) // including correspondence diff --git a/modules/core/src/main/lilaism/LilaLibraryExtensions.scala b/modules/core/src/main/lilaism/LilaLibraryExtensions.scala index 1f1af961792f..b93ec1a378d0 100644 --- a/modules/core/src/main/lilaism/LilaLibraryExtensions.scala +++ b/modules/core/src/main/lilaism/LilaLibraryExtensions.scala @@ -2,7 +2,6 @@ package lila.core.lilaism import alleycats.Zero import com.typesafe.config.Config -import scalalib.extensions.* import java.util.Base64 import java.util.concurrent.TimeUnit import scala.concurrent.{ Future, ExecutionContext as EC } diff --git a/modules/core/src/main/misc.scala b/modules/core/src/main/misc.scala index 444e2084d34f..d0dca2595284 100644 --- a/modules/core/src/main/misc.scala +++ b/modules/core/src/main/misc.scala @@ -1,9 +1,6 @@ package lila.core package misc -import _root_.chess.format.{ Fen, Uci } -import play.api.libs.json.* - import lila.core.userId.* import lila.core.id.GameId diff --git a/modules/core/src/main/perf.scala b/modules/core/src/main/perf.scala index 588ed0ab1339..b23abeed10eb 100644 --- a/modules/core/src/main/perf.scala +++ b/modules/core/src/main/perf.scala @@ -1,6 +1,5 @@ package lila.core -import scalalib.Render import _root_.chess.{ variant as ChessVariant } import _root_.chess.variant.Variant import _root_.chess.Speed diff --git a/modules/core/src/main/round.scala b/modules/core/src/main/round.scala index 8465ef1f11ed..9386ebc7a415 100644 --- a/modules/core/src/main/round.scala +++ b/modules/core/src/main/round.scala @@ -4,8 +4,6 @@ package round import _root_.chess.{ Color, Move } import _root_.chess.format.{ Uci, Fen } import play.api.libs.json.{ JsArray, JsObject } -import play.api.libs.json.JsObject - import lila.core.net.IpAddress import lila.core.id.{ GameId, GamePlayerId, SimulId, TourId } import lila.core.userId.UserId diff --git a/modules/core/src/main/security.scala b/modules/core/src/main/security.scala index 9433e6e457dd..54a68f8445bc 100644 --- a/modules/core/src/main/security.scala +++ b/modules/core/src/main/security.scala @@ -3,7 +3,7 @@ package security import play.api.mvc.RequestHeader -import lila.core.user.{ User, UserEnabled } +import lila.core.user.User import lila.core.net.IpAddress import lila.core.userId.UserId import play.api.data.{ Form, Mapping } diff --git a/modules/core/src/main/team.scala b/modules/core/src/main/team.scala index 1b2dc5536440..a48c58204d33 100644 --- a/modules/core/src/main/team.scala +++ b/modules/core/src/main/team.scala @@ -2,8 +2,6 @@ package lila.core package team import reactivemongo.api.bson.Macros.Annotations.Key -import reactivemongo.api.bson.BSONDocument - import lila.core.data.Markdown import lila.core.userId.* import lila.core.id.{ TeamId, Flair } From 7b81f4ac8e6ec613879e42de0457050bf7dc1a6b Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Mon, 15 Jul 2024 11:33:01 +0700 Subject: [PATCH 22/30] Fix warning ui module --- modules/ui/src/main/ContentSecurityPolicy.scala | 2 -- modules/ui/src/main/Context.scala | 2 +- modules/ui/src/main/Nonce.scala | 2 +- modules/ui/src/main/Page.scala | 2 +- modules/ui/src/main/helper/AssetHelper.scala | 2 +- modules/ui/src/main/helper/DateHelper.scala | 2 +- modules/ui/src/main/helper/FlashHelper.scala | 1 - modules/ui/src/main/helper/Form3.scala | 2 -- modules/ui/src/main/helper/FormHelper.scala | 4 +--- modules/ui/src/main/helper/GameHelper.scala | 2 +- modules/ui/src/main/helper/HtmlHelper.scala | 6 +++--- modules/ui/src/main/helper/NumberHelper.scala | 2 -- modules/ui/src/main/helper/StringHelper.scala | 4 ---- modules/ui/src/main/helper/UserHelper.scala | 6 +----- modules/ui/src/main/router/LilaRouter.scala | 1 - 15 files changed, 11 insertions(+), 29 deletions(-) diff --git a/modules/ui/src/main/ContentSecurityPolicy.scala b/modules/ui/src/main/ContentSecurityPolicy.scala index 4dcc5bda7dd4..bc9dda3cf60c 100644 --- a/modules/ui/src/main/ContentSecurityPolicy.scala +++ b/modules/ui/src/main/ContentSecurityPolicy.scala @@ -1,7 +1,5 @@ package lila.ui -import lila.core.config.AssetDomain - case class ContentSecurityPolicy( defaultSrc: List[String], connectSrc: List[String], diff --git a/modules/ui/src/main/Context.scala b/modules/ui/src/main/Context.scala index 5708da9e0c19..b54e2f1bba13 100644 --- a/modules/ui/src/main/Context.scala +++ b/modules/ui/src/main/Context.scala @@ -1,6 +1,6 @@ package lila.ui -import play.api.mvc.{ Request, RequestHeader } +import play.api.mvc.RequestHeader import play.api.i18n.Lang import lila.core.i18n.{ Language, Translate, defaultLanguage } diff --git a/modules/ui/src/main/Nonce.scala b/modules/ui/src/main/Nonce.scala index f313021d99bd..9bd809045852 100644 --- a/modules/ui/src/main/Nonce.scala +++ b/modules/ui/src/main/Nonce.scala @@ -1,6 +1,6 @@ package lila.ui -import ScalatagsTemplate.{ *, given } +import ScalatagsTemplate.* opaque type Nonce = String object Nonce extends OpaqueString[Nonce]: diff --git a/modules/ui/src/main/Page.scala b/modules/ui/src/main/Page.scala index e947e19224c5..7d3b376b5386 100644 --- a/modules/ui/src/main/Page.scala +++ b/modules/ui/src/main/Page.scala @@ -1,6 +1,6 @@ package lila.ui -import ScalatagsTemplate.{ *, given } +import ScalatagsTemplate.* opaque type LangPath = String object LangPath extends OpaqueString[LangPath]: diff --git a/modules/ui/src/main/helper/AssetHelper.scala b/modules/ui/src/main/helper/AssetHelper.scala index 267e31a12ede..e1c3109b8dea 100644 --- a/modules/ui/src/main/helper/AssetHelper.scala +++ b/modules/ui/src/main/helper/AssetHelper.scala @@ -2,7 +2,7 @@ package lila.ui import play.api.libs.json.* -import lila.ui.ScalatagsTemplate.{ *, given } +import lila.ui.ScalatagsTemplate.* import lila.core.config.AssetBaseUrl import lila.core.data.SafeJsonStr diff --git a/modules/ui/src/main/helper/DateHelper.scala b/modules/ui/src/main/helper/DateHelper.scala index 0e6d52d0d4cf..95a88b14235b 100644 --- a/modules/ui/src/main/helper/DateHelper.scala +++ b/modules/ui/src/main/helper/DateHelper.scala @@ -7,7 +7,7 @@ import java.time.{ Duration, LocalDate } import java.util.concurrent.ConcurrentHashMap import lila.ui.ScalatagsTemplate.* -import lila.core.i18n.{ I18nKey, Translate } +import lila.core.i18n.Translate trait DateHelper: self: StringHelper => diff --git a/modules/ui/src/main/helper/FlashHelper.scala b/modules/ui/src/main/helper/FlashHelper.scala index 1645798cb164..1e8f96c74268 100644 --- a/modules/ui/src/main/helper/FlashHelper.scala +++ b/modules/ui/src/main/helper/FlashHelper.scala @@ -1,7 +1,6 @@ package lila.ui import lila.ui.ScalatagsTemplate.* -import lila.core.i18n.{ I18nKey as trans } trait FlashHelper: self: I18nHelper => diff --git a/modules/ui/src/main/helper/Form3.scala b/modules/ui/src/main/helper/Form3.scala index ba0440f06a41..3b418ddfb678 100644 --- a/modules/ui/src/main/helper/Form3.scala +++ b/modules/ui/src/main/helper/Form3.scala @@ -1,8 +1,6 @@ package lila.ui import play.api.data.* -import scalalib.Render - import lila.ui.ScalatagsTemplate.{ *, given } import lila.core.user.FlairApi import lila.core.i18n.{ I18nKey as trans, Translate } diff --git a/modules/ui/src/main/helper/FormHelper.scala b/modules/ui/src/main/helper/FormHelper.scala index 45f5459aa2db..8f750316e06f 100644 --- a/modules/ui/src/main/helper/FormHelper.scala +++ b/modules/ui/src/main/helper/FormHelper.scala @@ -1,11 +1,9 @@ package lila.ui import play.api.data.* -import play.api.i18n.Lang -import scalatags.generic.TypedTag import scalatags.text.Builder -import lila.ui.ScalatagsTemplate.{ *, given } +import lila.ui.ScalatagsTemplate.* trait FormHelper: self: I18nHelper => diff --git a/modules/ui/src/main/helper/GameHelper.scala b/modules/ui/src/main/helper/GameHelper.scala index dc1a66346e10..62effe5e2566 100644 --- a/modules/ui/src/main/helper/GameHelper.scala +++ b/modules/ui/src/main/helper/GameHelper.scala @@ -1,6 +1,6 @@ package lila.ui -import chess.{ Clock, Color, Mode, Outcome, Ply } +import chess.{ Clock, Color, Mode, Outcome } import lila.ui.ScalatagsTemplate.{ *, given } import lila.core.LightUser diff --git a/modules/ui/src/main/helper/HtmlHelper.scala b/modules/ui/src/main/helper/HtmlHelper.scala index efa1de2008c4..0dd55671cc90 100644 --- a/modules/ui/src/main/helper/HtmlHelper.scala +++ b/modules/ui/src/main/helper/HtmlHelper.scala @@ -19,12 +19,12 @@ object HtmlHelper: if blind then t.addChild(StringFrag(v)) else t.setAttr("title", Builder.GenericAttrValueSource(v)) - def copyMeLink(url: String, name: Frag): Tag = copyMe(url, a(targetBlank, href := url)(name)) + def copyMeLink(url: String, name: Frag): Tag = copyMe(a(targetBlank, href := url)(name)) def copyMeInput(content: String): Tag = - copyMe(content, input(spellcheck := "false", readonly, value := content)) + copyMe(input(spellcheck := "false", readonly, value := content)) - private def copyMe(content: String, target: Tag): Tag = + private def copyMe(target: Tag): Tag = div(cls := "copy-me")( target(cls := "copy-me__target"), button(cls := "copy-me__button button button-metal", dataIcon := Icon.Clipboard) diff --git a/modules/ui/src/main/helper/NumberHelper.scala b/modules/ui/src/main/helper/NumberHelper.scala index 938fde85af8d..be60538816fe 100644 --- a/modules/ui/src/main/helper/NumberHelper.scala +++ b/modules/ui/src/main/helper/NumberHelper.scala @@ -1,7 +1,5 @@ package lila.ui -import play.api.i18n.Lang - import java.text.NumberFormat import java.util.concurrent.ConcurrentHashMap import lila.core.i18n.Translate diff --git a/modules/ui/src/main/helper/StringHelper.scala b/modules/ui/src/main/helper/StringHelper.scala index 943c063e290c..3acef3a81e13 100644 --- a/modules/ui/src/main/helper/StringHelper.scala +++ b/modules/ui/src/main/helper/StringHelper.scala @@ -1,10 +1,6 @@ package lila.ui -import play.api.i18n.Lang - import lila.ui.ScalatagsTemplate.* -import lila.core.i18n.Translate -import scalalib.StringOps.slug.{ apply as slugify } trait StringHelper: self: I18nHelper & NumberHelper => diff --git a/modules/ui/src/main/helper/UserHelper.scala b/modules/ui/src/main/helper/UserHelper.scala index f2606e8410ef..ef6b9d378f1a 100644 --- a/modules/ui/src/main/helper/UserHelper.scala +++ b/modules/ui/src/main/helper/UserHelper.scala @@ -1,13 +1,9 @@ package lila.ui -import play.api.i18n.Lang import chess.PlayerTitle import lila.ui.ScalatagsTemplate.{ *, given } -import lila.core.i18n.Translate -import lila.core.perf.UserWithPerfs -import lila.core.perf.KeyedPerf -import lila.core.perf.UserPerfs +import lila.core.perf.{ UserWithPerfs, KeyedPerf, UserPerfs } import lila.core.LightUser import lila.core.socket.IsOnline diff --git a/modules/ui/src/main/router/LilaRouter.scala b/modules/ui/src/main/router/LilaRouter.scala index 25d8f1ab5f3f..dc788430447e 100644 --- a/modules/ui/src/main/router/LilaRouter.scala +++ b/modules/ui/src/main/router/LilaRouter.scala @@ -4,7 +4,6 @@ import play.api.mvc.{ PathBindable, QueryStringBindable } import scalalib.newtypes.SameRuntime import lila.core.id.* -import chess.variant.Variant import chess.format.Uci import lila.core.study.{ Order as StudyOrder } From ac203b1332e3760cbe49019e70100301e66f62e1 Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Mon, 15 Jul 2024 11:47:05 +0700 Subject: [PATCH 23/30] Run scalafixAll & scalafmtAll & manual fix --- app/Env.scala | 5 +- app/Lila.scala | 2 +- app/controllers/Account.scala | 5 +- app/controllers/Analyse.scala | 4 +- app/controllers/Api.scala | 6 +- app/controllers/Auth.scala | 6 +- app/controllers/BulkPairing.scala | 4 +- app/controllers/Challenge.scala | 11 ++-- app/controllers/Clas.scala | 4 +- app/controllers/Dasher.scala | 3 +- app/controllers/Export.scala | 4 +- app/controllers/Fishnet.scala | 2 +- app/controllers/ForumCateg.scala | 4 +- app/controllers/ForumController.scala | 2 +- app/controllers/ForumPost.scala | 3 +- app/controllers/ForumTopic.scala | 3 +- app/controllers/Game.scala | 2 - app/controllers/GameMod.scala | 4 -- app/controllers/Github.scala | 2 +- app/controllers/Importer.scala | 6 +- app/controllers/Insight.scala | 4 +- app/controllers/LilaController.scala | 9 ++- app/controllers/Main.scala | 6 +- app/controllers/Mod.scala | 6 +- app/controllers/OAuth.scala | 6 +- app/controllers/Opening.scala | 2 +- app/controllers/Plan.scala | 1 + app/controllers/PlayApi.scala | 2 +- app/controllers/Puzzle.scala | 8 +-- app/controllers/Relation.scala | 6 +- app/controllers/RelayRound.scala | 4 +- app/controllers/RelayTour.scala | 4 +- app/controllers/Report.scala | 4 +- app/controllers/Round.scala | 6 +- app/controllers/Search.scala | 4 -- app/controllers/Setup.scala | 10 +--- app/controllers/Study.scala | 14 ++--- app/controllers/Team.scala | 2 +- app/controllers/TeamApi.scala | 1 - app/controllers/Timeline.scala | 1 - app/controllers/TitleVerify.scala | 6 +- app/controllers/Tournament.scala | 6 +- app/controllers/Tutor.scala | 3 +- app/controllers/Tv.scala | 2 +- app/controllers/Ublog.scala | 3 +- app/controllers/User.scala | 13 ++-- app/controllers/UserAnalysis.scala | 3 +- app/http/KeyPages.scala | 1 - app/http/ResponseBuilder.scala | 2 - app/mashup/GameFilter.scala | 6 +- app/mashup/Preload.scala | 5 +- app/mashup/TeamInfo.scala | 8 +-- app/mashup/UserInfo.scala | 8 +-- app/views/activity.scala | 1 - app/views/analyse/replay.scala | 4 +- app/views/analyse/ui.scala | 3 +- app/views/appeal/discussion.scala | 3 +- app/views/appeal/queue.scala | 3 +- app/views/base/page.scala | 8 +-- app/views/clas.scala | 1 - app/views/fide.scala | 2 +- app/views/game/side.scala | 1 - app/views/game/ui.scala | 2 +- app/views/game/widgets.scala | 5 +- app/views/insight.scala | 2 - app/views/lobby/bits.scala | 1 - app/views/lobby/home.scala | 3 +- app/views/mod/communication.scala | 1 - app/views/mod/games.scala | 6 +- app/views/mod/inquiry.scala | 4 +- app/views/mod/ui.scala | 2 +- app/views/puzzle/dashboard.scala | 4 -- app/views/puzzle/ui.scala | 5 +- app/views/report.scala | 11 ++-- app/views/round/player.scala | 3 +- app/views/round/watcher.scala | 1 - app/views/streamer.scala | 2 +- app/views/study.scala | 9 ++- app/views/swiss.scala | 2 +- app/views/team/show.scala | 7 +-- app/views/team/tournaments.scala | 2 +- app/views/title.scala | 2 +- app/views/ublog.scala | 4 +- app/views/user/list.scala | 2 +- app/views/user/mod.scala | 5 +- app/views/user/show/gamesContent.scala | 4 +- app/views/user/show/header.scala | 5 +- app/views/user/show/page.scala | 6 +- app/views/user/ui.scala | 6 +- .../activity/src/main/ActivityReadApi.scala | 9 ++- modules/activity/src/main/ActivityUi.scala | 9 ++- modules/activity/src/main/ActivityView.scala | 11 ++-- .../activity/src/main/ActivityWriteApi.scala | 2 +- modules/activity/src/main/BSONHandlers.scala | 9 +-- modules/activity/src/main/Env.scala | 8 +-- modules/activity/src/main/JsonView.scala | 8 +-- modules/activity/src/main/activities.scala | 2 +- modules/analyse/src/main/AccuracyCP.scala | 3 +- .../analyse/src/main/AccuracyPercent.scala | 5 +- modules/analyse/src/main/Analyser.scala | 2 +- modules/analyse/src/main/Annotator.scala | 2 +- modules/analyse/src/main/Env.scala | 3 +- modules/analyse/src/main/ExternalEngine.scala | 4 +- modules/analyse/src/main/JsonView.scala | 3 +- modules/analyse/src/main/ui/AnalyseI18n.scala | 9 ++- modules/analyse/src/main/ui/AnalyseUi.scala | 3 +- .../src/test/AccuracyPercentTest.scala | 2 +- modules/analyse/src/test/AnnotatorTest.scala | 11 ++-- modules/api/src/main/Cli.scala | 1 - modules/api/src/main/Context.scala | 9 ++- modules/api/src/main/Env.scala | 3 - modules/api/src/main/EventStream.scala | 6 +- modules/api/src/main/GameApi.scala | 5 +- modules/api/src/main/GameApiV2.scala | 9 +-- modules/api/src/main/LobbyApi.scala | 3 +- modules/api/src/main/PgnDump.scala | 4 +- modules/api/src/main/RoundApi.scala | 16 +++-- modules/api/src/main/TextLpvExpand.scala | 2 +- modules/api/src/main/UserApi.scala | 7 +-- modules/appeal/src/main/Appeal.scala | 4 +- modules/appeal/src/main/AppealApi.scala | 4 +- modules/appeal/src/main/ui/AppealTreeUi.scala | 3 +- modules/appeal/src/main/ui/AppealUi.scala | 1 + modules/bookmark/src/main/BookmarkApi.scala | 2 +- .../bookmark/src/main/PaginatorBuilder.scala | 3 +- modules/bot/src/main/BotJsonView.scala | 2 +- modules/bot/src/main/BotPlayer.scala | 3 +- modules/bot/src/main/GameStateStream.scala | 10 ++-- modules/bot/src/main/OnlineApiUsers.scala | 3 +- modules/challenge/src/main/BSONHandlers.scala | 2 +- modules/challenge/src/main/Challenge.scala | 13 ++-- modules/challenge/src/main/ChallengeApi.scala | 3 +- .../challenge/src/main/ChallengeBulk.scala | 11 ++-- .../src/main/ChallengeBulkSetup.scala | 8 +-- .../challenge/src/main/ChallengeGranter.scala | 5 +- .../challenge/src/main/ChallengeMaker.scala | 5 +- modules/challenge/src/main/ChallengeMsg.scala | 2 +- .../challenge/src/main/ChallengeSocket.scala | 2 +- modules/challenge/src/main/JsonView.scala | 11 ++-- .../challenge/src/main/ui/ChallengeUi.scala | 9 +-- modules/chat/src/main/ChatApi.scala | 10 ++-- modules/chat/src/main/ChatTimeout.scala | 2 +- modules/chat/src/main/ChatUi.scala | 3 +- modules/chat/src/main/Env.scala | 3 +- modules/chat/src/main/Line.scala | 3 +- modules/clas/src/main/ClasApi.scala | 11 ++-- modules/clas/src/main/ClasProgress.scala | 7 ++- modules/clas/src/main/Student.scala | 2 +- modules/clas/src/main/ui/ClasPages.scala | 4 +- modules/clas/src/main/ui/ClasUi.scala | 5 +- modules/clas/src/main/ui/DashboardUi.scala | 8 +-- modules/clas/src/main/ui/StudentFormUi.scala | 2 +- modules/clas/src/main/ui/StudentUi.scala | 3 +- modules/cms/src/main/CmsApi.scala | 7 +-- modules/cms/src/main/CmsMarkup.scala | 2 +- modules/cms/src/main/CmsUi.scala | 7 +-- modules/cms/src/main/Env.scala | 2 +- modules/coach/src/main/Coach.scala | 3 +- modules/coach/src/main/CoachApi.scala | 3 +- modules/coach/src/main/CoachPager.scala | 10 ++-- modules/coach/src/main/ui/CoachEditUi.scala | 5 +- modules/coach/src/main/ui/CoachUi.scala | 11 ++-- modules/common/src/main/Bus.scala | 3 +- modules/common/src/main/Chronometer.scala | 2 +- modules/common/src/main/Form.scala | 3 +- modules/common/src/main/Iso.scala | 7 +-- modules/common/src/main/Json.scala | 2 +- modules/common/src/main/LilaFuture.scala | 2 +- modules/common/src/main/MarkdownRender.scala | 4 +- modules/common/src/main/RawHtml.scala | 4 +- modules/common/src/main/String.scala | 5 +- modules/common/src/main/config.scala | 1 - modules/common/src/main/mon.scala | 2 +- modules/common/src/test/AutoConfigTest.scala | 1 + modules/common/src/test/MarkdownTest.scala | 3 +- modules/common/src/test/RawHtmlTest.scala | 3 +- modules/common/src/test/StringTest.scala | 1 + .../coordinate/src/main/CoordinateUi.scala | 5 +- modules/core/src/main/LightUser.scala | 6 +- modules/core/src/main/captcha.scala | 2 +- modules/core/src/main/challenge.scala | 4 +- modules/core/src/main/chat.scala | 3 +- modules/core/src/main/data.scala | 1 + modules/core/src/main/db.scala | 2 +- modules/core/src/main/email.scala | 3 +- modules/core/src/main/fishnet.scala | 4 +- modules/core/src/main/forum.scala | 4 +- modules/core/src/main/game/Game.scala | 13 ++-- modules/core/src/main/game/NewGame.scala | 6 +- modules/core/src/main/game/Player.scala | 7 ++- modules/core/src/main/game/data.scala | 5 +- modules/core/src/main/game/light.scala | 2 +- modules/core/src/main/game/misc.scala | 19 +++--- modules/core/src/main/history.scala | 7 +-- .../main/lilaism/LilaLibraryExtensions.scala | 5 +- modules/core/src/main/misc.scala | 2 +- modules/core/src/main/net.scala | 6 +- modules/core/src/main/notify.scala | 2 +- modules/core/src/main/perf.scala | 8 +-- modules/core/src/main/perm.scala | 2 +- modules/core/src/main/pool.scala | 6 +- modules/core/src/main/practice.scala | 2 +- modules/core/src/main/pref.scala | 2 +- modules/core/src/main/round.scala | 8 +-- modules/core/src/main/security.scala | 9 ++- modules/core/src/main/setup.scala | 4 +- modules/core/src/main/simul.scala | 2 +- modules/core/src/main/socket.scala | 6 +- modules/core/src/main/swiss.scala | 2 +- modules/core/src/main/team.scala | 3 +- modules/core/src/main/timeline.scala | 4 +- modules/core/src/main/tournament.scala | 2 +- modules/core/src/main/user.scala | 16 +++-- modules/db/src/main/Handlers.scala | 3 +- modules/db/src/main/PaginatorAdapter.scala | 1 - modules/evalCache/src/main/BSONHandlers.scala | 2 +- modules/evalCache/src/main/EvalCacheApi.scala | 2 +- .../evalCache/src/main/EvalCacheEntry.scala | 5 +- .../src/main/PlayerAggregateAssessment.scala | 1 + modules/evaluation/src/main/Statistics.scala | 2 - modules/event/src/main/EventApi.scala | 2 +- modules/event/src/main/EventForm.scala | 2 +- modules/event/src/main/ui/EventUi.scala | 3 +- modules/feed/src/main/Env.scala | 2 +- modules/feed/src/main/FeedUi.scala | 3 +- modules/fide/src/main/Env.scala | 2 +- modules/fide/src/main/Federation.scala | 4 +- modules/fide/src/main/FederationApi.scala | 2 - modules/fide/src/main/FidePaginator.scala | 2 +- modules/fide/src/main/FidePlayer.scala | 1 + modules/fide/src/main/FidePlayerApi.scala | 2 +- modules/fide/src/main/FidePlayerSync.scala | 3 +- modules/fide/src/main/FideRepo.scala | 2 +- modules/fide/src/main/ui/FideUi.scala | 3 +- modules/fishnet/src/main/Analyser.scala | 2 +- modules/fishnet/src/main/Env.scala | 1 - modules/fishnet/src/main/FishnetApi.scala | 3 +- .../fishnet/src/main/FishnetEvalCache.scala | 1 + .../fishnet/src/main/FishnetOpeningBook.scala | 2 +- modules/fishnet/src/main/JsonApi.scala | 2 +- modules/fishnet/src/test/AnnotatorTest.scala | 17 +++--- .../fishnet/src/test/TreeBuilderTest.scala | 34 ++++++----- modules/forum/src/main/BSONHandlers.scala | 4 +- modules/forum/src/main/Env.scala | 3 +- modules/forum/src/main/ForumAccess.scala | 2 +- modules/forum/src/main/ForumCategApi.scala | 1 + modules/forum/src/main/ForumDelete.scala | 4 +- modules/forum/src/main/ForumForm.scala | 2 +- modules/forum/src/main/ForumPaginator.scala | 4 +- modules/forum/src/main/ForumPost.scala | 5 +- modules/forum/src/main/ForumPostApi.scala | 9 ++- modules/forum/src/main/ForumPostRepo.scala | 4 +- modules/forum/src/main/ForumTopic.scala | 2 +- modules/forum/src/main/ForumTopicApi.scala | 12 ++-- modules/forum/src/main/ForumTopicRepo.scala | 2 +- modules/forum/src/main/ui/CategUi.scala | 6 +- modules/forum/src/main/ui/ForumBits.scala | 1 + modules/forum/src/main/ui/PostUi.scala | 1 + modules/forum/src/main/ui/TopicUi.scala | 7 ++- modules/forumSearch/src/main/Env.scala | 5 +- .../forumSearch/src/main/ForumSearchApi.scala | 4 +- modules/game/src/main/BSONHandlers.scala | 16 ++--- modules/game/src/main/BinaryFormat.scala | 2 +- modules/game/src/main/Blurs.scala | 3 +- modules/game/src/main/CaptchaApi.scala | 9 +-- modules/game/src/main/CrosstableApi.scala | 2 +- modules/game/src/main/Event.scala | 2 +- modules/game/src/main/Game.scala | 14 ++--- modules/game/src/main/GameDiff.scala | 4 +- modules/game/src/main/GameRepo.scala | 8 +-- .../game/src/main/GamesByUsersStream.scala | 3 +- modules/game/src/main/IdGenerator.scala | 7 +-- modules/game/src/main/Importer.scala | 10 ++-- modules/game/src/main/JsonView.scala | 2 +- modules/game/src/main/LightGame.scala | 4 +- modules/game/src/main/Metadata.scala | 4 -- modules/game/src/main/PaginatorBuilder.scala | 2 +- modules/game/src/main/PgnDump.scala | 5 +- modules/game/src/main/Player.scala | 4 +- modules/game/src/main/Pov.scala | 2 - modules/game/src/main/UserGameApi.scala | 2 +- modules/game/src/main/actorApi.scala | 4 +- modules/game/src/main/package.scala | 1 - modules/game/src/main/ui/GameUi.scala | 5 +- modules/game/src/test/BinaryClockTest.scala | 2 +- modules/game/src/test/EventTest.scala | 5 +- modules/gameSearch/src/main/Env.scala | 2 +- modules/gameSearch/src/main/FormHelpers.scala | 2 +- .../gameSearch/src/main/GameSearchApi.scala | 2 +- .../gameSearch/src/main/GameSearchForm.scala | 5 +- .../gameSearch/src/main/GameSearchUi.scala | 8 ++- modules/gameSearch/src/main/Sorting.scala | 5 +- .../gameSearch/src/main/UserGameSearch.scala | 1 + modules/gameSearch/src/main/package.scala | 2 +- modules/gathering/src/main/Condition.scala | 7 ++- .../gathering/src/main/ConditionForm.scala | 2 +- .../src/main/ConditionHandlers.scala | 5 +- .../gathering/src/main/ui/GatheringUi.scala | 5 +- modules/history/src/main/Env.scala | 3 - modules/history/src/main/HistoryApi.scala | 4 +- modules/history/src/main/RatingChartApi.scala | 3 +- modules/i18n/src/main/I18nQuantity.scala | 1 + modules/i18n/src/main/JsDump.scala | 3 +- modules/i18n/src/main/LangList.scala | 1 + modules/i18n/src/main/LangPicker.scala | 3 +- modules/i18n/src/main/Registry.scala | 3 +- modules/i18n/src/main/Translator.scala | 2 +- modules/i18n/src/main/package.scala | 1 - modules/i18n/src/test/TranslationTest.scala | 4 +- .../src/main/AggregationClusters.scala | 2 +- .../src/main/AggregationPipeline.scala | 1 - modules/insight/src/main/InsightApi.scala | 3 +- .../insight/src/main/InsightDimension.scala | 2 +- modules/insight/src/main/InsightEntry.scala | 2 - modules/insight/src/main/InsightIndexer.scala | 1 - .../src/main/InsightPerfStatsApi.scala | 3 +- modules/insight/src/main/PovToEntry.scala | 2 - modules/irc/src/main/IrcApi.scala | 2 +- modules/irwin/src/main/IrwinApi.scala | 4 +- modules/irwin/src/main/IrwinRequest.scala | 1 - modules/irwin/src/main/IrwinThresholds.scala | 4 +- modules/irwin/src/main/IrwinUi.scala | 5 +- modules/irwin/src/main/KaladinApi.scala | 6 +- modules/irwin/src/main/KaladinUser.scala | 4 +- modules/lobby/src/main/Biter.scala | 3 +- modules/lobby/src/main/Env.scala | 2 +- modules/lobby/src/main/Hook.scala | 6 +- modules/lobby/src/main/HookRepo.scala | 5 +- modules/lobby/src/main/LobbySocket.scala | 9 ++- modules/lobby/src/main/LobbySyncActor.scala | 4 +- modules/lobby/src/main/LobbyUser.scala | 7 +-- modules/lobby/src/main/Seek.scala | 9 ++- modules/lobby/src/main/SeekApi.scala | 4 +- modules/mailer/src/main/AutomaticEmail.scala | 6 +- modules/mailer/src/main/Env.scala | 2 +- modules/mailer/src/main/Mailer.scala | 4 +- modules/memo/src/main/Env.scala | 4 +- .../memo/src/main/ExpirableCallbackMemo.scala | 1 + modules/memo/src/main/MongoCache.scala | 3 +- modules/memo/src/main/Picfit.scala | 10 ++-- modules/memo/src/main/RateLimit.scala | 2 +- modules/memo/src/main/SettingStore.scala | 13 ++-- modules/memo/src/main/Syncache.scala | 1 + modules/mod/src/main/AssessApi.scala | 9 ++- modules/mod/src/main/Env.scala | 8 +-- modules/mod/src/main/GameMod.scala | 6 +- modules/mod/src/main/Inquiry.scala | 2 +- modules/mod/src/main/IpRender.scala | 2 +- modules/mod/src/main/ModApi.scala | 7 +-- modules/mod/src/main/ModNotifier.scala | 2 +- modules/mod/src/main/ModlogApi.scala | 9 ++- modules/mod/src/main/Presets.scala | 4 +- modules/mod/src/main/PublicChat.scala | 4 +- modules/mod/src/main/RatingRefund.scala | 10 ++-- modules/mod/src/main/SandbagWatch.scala | 1 - modules/mod/src/main/ui/GamifyUi.scala | 3 +- modules/mod/src/main/ui/ModInquiryUi.scala | 5 +- modules/mod/src/main/ui/ModUi.scala | 10 ++-- modules/mod/src/main/ui/ModUserTableUi.scala | 3 +- modules/mod/src/main/ui/ModUserUi.scala | 8 +-- modules/mod/src/main/ui/PublicChatUi.scala | 4 +- modules/msg/src/main/BsonHandlers.scala | 2 +- modules/msg/src/main/MsgApi.scala | 4 +- modules/msg/src/main/MsgCompat.scala | 5 +- modules/msg/src/main/MsgContact.scala | 5 +- modules/msg/src/main/MsgNotify.scala | 2 +- modules/msg/src/main/MsgPreset.scala | 2 +- modules/msg/src/main/MsgSearch.scala | 3 +- modules/msg/src/main/MsgSecurity.scala | 8 +-- modules/oauth/src/main/AccessToken.scala | 2 +- modules/oauth/src/main/AccessTokenApi.scala | 6 +- .../oauth/src/main/AccessTokenRequest.scala | 6 +- modules/oauth/src/main/AuthorizationApi.scala | 1 + modules/oauth/src/main/Env.scala | 4 +- modules/oauth/src/main/OAuthScope.scala | 4 +- modules/oauth/src/main/OAuthServer.scala | 4 +- modules/oauth/src/main/Protocol.scala | 6 +- modules/oauth/src/main/ui/AuthorizeUi.scala | 3 +- modules/oauth/src/main/ui/TokenUi.scala | 1 + modules/opening/src/main/OpeningApi.scala | 4 +- .../opening/src/main/OpeningExplorer.scala | 1 + modules/opening/src/main/OpeningQuery.scala | 1 - modules/opening/src/main/OpeningSearch.scala | 2 +- modules/opening/src/main/ui/OpeningBits.scala | 3 +- modules/opening/src/main/ui/OpeningUi.scala | 3 +- modules/opening/src/main/ui/WikiUi.scala | 1 + modules/perfStat/src/main/JsonView.scala | 4 +- modules/perfStat/src/main/PerfStat.scala | 2 - modules/perfStat/src/main/PerfStatApi.scala | 9 +-- modules/perfStat/src/main/PerfStatUi.scala | 11 ++-- modules/plan/src/main/JsonHandlers.scala | 2 +- modules/plan/src/main/PayPalClient.scala | 5 +- modules/plan/src/main/PlanApi.scala | 4 +- modules/plan/src/main/ui/PlanPages.scala | 4 +- modules/plan/src/main/ui/PlanUi.scala | 5 +- modules/playban/src/main/PlaybanApi.scala | 4 +- modules/playban/src/main/model.scala | 2 +- modules/pool/src/main/GameStarter.scala | 2 +- modules/pool/src/main/MatchMaking.scala | 3 +- modules/pool/src/main/PoolActor.scala | 2 +- modules/pool/src/main/PoolApi.scala | 5 +- modules/pool/src/main/PoolConfig.scala | 2 +- modules/pool/src/main/PoolList.scala | 1 + modules/pool/src/main/PoolMember.scala | 2 +- .../practice/src/main/PracticeStructure.scala | 2 +- modules/practice/src/main/PracticeUi.scala | 5 +- modules/pref/src/main/PrefApi.scala | 2 +- modules/pref/src/main/ui/AccountPages.scala | 1 + modules/pref/src/main/ui/AccountPref.scala | 1 + modules/pref/src/main/ui/AccountUi.scala | 4 +- modules/pref/src/main/ui/DasherJson.scala | 4 +- modules/pref/src/main/ui/PrefHelper.scala | 2 +- modules/pref/src/main/ui/TwoFactorUi.scala | 2 +- modules/push/src/main/FirebasePush.scala | 2 +- modules/push/src/main/PushApi.scala | 8 +-- modules/push/src/main/WebPush.scala | 2 +- modules/puzzle/src/main/BsonHandlers.scala | 2 +- modules/puzzle/src/main/DailyPuzzle.scala | 2 - modules/puzzle/src/main/Env.scala | 3 +- modules/puzzle/src/main/JsonView.scala | 7 +-- modules/puzzle/src/main/PuzzleActivity.scala | 1 - modules/puzzle/src/main/PuzzleApi.scala | 6 +- modules/puzzle/src/main/PuzzleFinisher.scala | 12 ++-- modules/puzzle/src/main/PuzzleHistory.scala | 3 +- modules/puzzle/src/main/PuzzleOpening.scala | 2 +- modules/puzzle/src/main/PuzzlePath.scala | 1 + modules/puzzle/src/main/PuzzleTheme.scala | 2 +- modules/puzzle/src/main/PuzzleTrust.scala | 2 +- modules/puzzle/src/main/ui/PuzzleBits.scala | 5 +- modules/puzzle/src/main/ui/PuzzleUi.scala | 10 ++-- modules/puzzle/src/test/JsonViewTest.scala | 3 +- modules/racer/src/main/Env.scala | 2 +- .../racer/src/main/RacerBsonHandlers.scala | 2 +- modules/racer/src/main/RacerSocket.scala | 2 +- modules/racer/src/main/ui/RacerUi.scala | 5 +- modules/rating/src/main/BSONHandlers.scala | 3 +- modules/rating/src/main/Gaussian.scala | 2 - modules/rating/src/main/Glicko.scala | 4 +- modules/rating/src/main/Perf.scala | 6 +- modules/rating/src/main/PerfType.scala | 4 +- modules/rating/src/main/RatingFactor.scala | 3 - modules/rating/src/main/RatingRange.scala | 2 +- modules/rating/src/main/RatingRegulator.scala | 2 - modules/rating/src/main/UserPerfs.scala | 10 +--- modules/rating/src/main/UserWithPerfs.scala | 4 +- modules/rating/src/main/glicko2/Result.scala | 2 - modules/rating/src/main/package.scala | 2 - .../src/test/RatingCalculatorTest.scala | 3 +- modules/relation/src/main/Env.scala | 1 - modules/relation/src/main/JsonView.scala | 1 + modules/relation/src/main/RelationApi.scala | 10 ++-- modules/relation/src/main/RelationRepo.scala | 4 +- .../relation/src/main/RelationStream.scala | 1 - modules/relation/src/main/ui/RelationUi.scala | 5 +- modules/relay/src/main/Env.scala | 5 +- modules/relay/src/main/JsonView.scala | 7 +-- modules/relay/src/main/RelayApi.scala | 12 ++-- modules/relay/src/main/RelayFetch.scala | 6 +- .../relay/src/main/RelayFidePlayerApi.scala | 2 +- modules/relay/src/main/RelayFormat.scala | 3 +- modules/relay/src/main/RelayGame.scala | 6 +- modules/relay/src/main/RelayGroup.scala | 2 +- modules/relay/src/main/RelayInputSanity.scala | 2 - modules/relay/src/main/RelayLeaderboard.scala | 2 +- modules/relay/src/main/RelayPager.scala | 1 + modules/relay/src/main/RelayPlayerTour.scala | 3 +- modules/relay/src/main/RelayPlayers.scala | 2 +- modules/relay/src/main/RelayPush.scala | 5 +- modules/relay/src/main/RelayRound.scala | 6 +- modules/relay/src/main/RelayRoundForm.scala | 15 ++--- modules/relay/src/main/RelayStatsApi.scala | 5 +- modules/relay/src/main/RelayTour.scala | 3 +- modules/relay/src/main/RelayTourForm.scala | 4 +- modules/relay/src/main/RelayTourStream.scala | 2 +- modules/relay/src/main/RelayUpdatePlan.scala | 1 - modules/relay/src/main/ui/FormUi.scala | 5 +- modules/relay/src/main/ui/RelayTourUi.scala | 9 +-- modules/relay/src/main/ui/RelayUi.scala | 7 +-- .../src/test/RelayPlanUpdateFixtures.scala | 6 +- modules/report/src/main/AutoAnalysis.scala | 2 +- modules/report/src/main/Env.scala | 2 - modules/report/src/main/Reason.scala | 1 + modules/report/src/main/Report.scala | 6 +- modules/report/src/main/ReportApi.scala | 6 +- modules/report/src/main/ReportForm.scala | 4 +- .../report/src/main/ReportThresholds.scala | 4 +- modules/report/src/main/Room.scala | 1 - modules/report/src/main/model.scala | 2 +- modules/report/src/main/ui/ReportUi.scala | 6 +- modules/room/src/main/RoomSocket.scala | 12 ++-- modules/round/src/main/ApiMoveStream.scala | 2 +- modules/round/src/main/CorresAlarm.scala | 3 +- .../round/src/main/CorrespondenceEmail.scala | 4 +- modules/round/src/main/Drawer.scala | 4 +- modules/round/src/main/Env.scala | 9 ++- .../round/src/main/FarmBoostDetection.scala | 5 +- modules/round/src/main/Finisher.scala | 8 +-- modules/round/src/main/Forecast.scala | 1 - modules/round/src/main/GameProxy.scala | 3 +- modules/round/src/main/JsonView.scala | 12 ++-- modules/round/src/main/Messenger.scala | 1 - modules/round/src/main/Moretimer.scala | 4 +- modules/round/src/main/PerfsUpdater.scala | 8 +-- modules/round/src/main/Player.scala | 4 +- modules/round/src/main/RecentTvGames.scala | 2 +- modules/round/src/main/Rematcher.scala | 8 +-- modules/round/src/main/RoundAsyncActor.scala | 8 +-- modules/round/src/main/RoundGame.scala | 2 +- modules/round/src/main/RoundMobile.scala | 5 +- modules/round/src/main/RoundNotifier.scala | 4 +- modules/round/src/main/RoundSocket.scala | 9 ++- modules/round/src/main/SelfReport.scala | 2 +- modules/round/src/main/StepBuilder.scala | 4 +- modules/round/src/main/Takebacker.scala | 6 +- modules/round/src/main/Titivate.scala | 5 +- modules/round/src/main/actorApi.scala | 2 - modules/round/src/main/model.scala | 2 - modules/round/src/main/package.scala | 2 - modules/round/src/main/ui/RoundI18n.scala | 5 +- modules/round/src/main/ui/RoundUi.scala | 4 +- modules/search/src/main/Env.scala | 2 +- .../search/src/main/LilaSearchClient.scala | 2 +- modules/security/src/main/Authenticator.scala | 4 +- modules/security/src/main/EmailChange.scala | 2 +- modules/security/src/main/Env.scala | 2 +- modules/security/src/main/Flood.scala | 1 + .../security/src/main/GarbageCollector.scala | 4 +- modules/security/src/main/GeoIP.scala | 2 +- modules/security/src/main/Hcaptcha.scala | 2 +- modules/security/src/main/Ip2Proxy.scala | 2 +- modules/security/src/main/IpTrust.scala | 2 +- modules/security/src/main/LilaCookie.scala | 2 +- modules/security/src/main/Mobile.scala | 3 +- modules/security/src/main/PrintBan.scala | 2 +- modules/security/src/main/SecurityApi.scala | 8 +-- modules/security/src/main/SecurityForm.scala | 5 +- modules/security/src/main/Signup.scala | 6 +- modules/security/src/main/Store.scala | 7 +-- modules/security/src/main/StringToken.scala | 2 +- modules/security/src/main/UserLogins.scala | 5 +- modules/security/src/main/model.scala | 8 +-- .../src/main/ui/AccountSecurity.scala | 1 + modules/security/src/test/AuthTest.scala | 4 +- modules/security/src/test/MobileTest.scala | 2 +- .../src/test/PasswordHasherTest.scala | 1 - modules/setup/src/main/AiConfig.scala | 8 +-- modules/setup/src/main/ApiAiConfig.scala | 8 +-- modules/setup/src/main/ApiConfig.scala | 2 +- modules/setup/src/main/Config.scala | 2 +- modules/setup/src/main/HookConfig.scala | 7 +-- modules/setup/src/main/Mappings.scala | 6 +- modules/setup/src/main/OpenConfig.scala | 3 +- modules/setup/src/main/Processor.scala | 3 +- modules/setup/src/main/SetupForm.scala | 5 +- modules/setup/src/main/ui/SetupUi.scala | 59 +++++-------------- modules/shutup/src/main/Env.scala | 2 - modules/shutup/src/main/PublicLine.scala | 2 +- modules/shutup/src/main/ShutupApi.scala | 2 +- modules/simul/src/main/JsonView.scala | 1 - modules/simul/src/main/Simul.scala | 7 +-- modules/simul/src/main/SimulApi.scala | 12 ++-- modules/simul/src/main/SimulCondition.scala | 7 +-- modules/simul/src/main/SimulPlayer.scala | 1 + modules/simul/src/main/SimulRepo.scala | 2 +- modules/simul/src/main/SimulSocket.scala | 3 +- modules/simul/src/main/ui/SimulFormUi.scala | 10 ++-- modules/simul/src/main/ui/SimulHome.scala | 4 +- modules/simul/src/main/ui/SimulShow.scala | 10 ++-- modules/simul/src/main/ui/SimulUi.scala | 1 + modules/socket/src/main/RemoteSocket.scala | 2 +- modules/socket/src/main/UserLagCache.scala | 1 + modules/storm/src/main/Env.scala | 2 +- .../storm/src/main/StormBsonHandlers.scala | 2 +- modules/storm/src/main/StormDay.scala | 1 + modules/storm/src/main/StormPuzzle.scala | 1 + modules/storm/src/main/ui/StormUi.scala | 5 +- modules/streamer/src/main/LiveStream.scala | 2 +- modules/streamer/src/main/Stream.scala | 2 +- modules/streamer/src/main/Streamer.scala | 2 +- modules/streamer/src/main/StreamerPager.scala | 2 +- modules/streamer/src/main/Streaming.scala | 2 +- .../streamer/src/main/ui/StreamerBits.scala | 7 +-- .../streamer/src/main/ui/StreamerEdit.scala | 1 + modules/streamer/src/main/ui/StreamerUi.scala | 6 +- modules/study/src/main/AnaDests.scala | 2 +- modules/study/src/main/BSONHandlers.scala | 7 ++- modules/study/src/main/ChapterMaker.scala | 5 +- modules/study/src/main/CommentParser.scala | 2 +- modules/study/src/main/GameToRoot.scala | 2 +- modules/study/src/main/JsonView.scala | 3 +- modules/study/src/main/PgnDump.scala | 8 +-- modules/study/src/main/ServerEval.scala | 8 +-- modules/study/src/main/Study.scala | 6 +- modules/study/src/main/StudyApi.scala | 4 +- .../study/src/main/StudyChapterPreview.scala | 2 +- modules/study/src/main/StudyFlatTree.scala | 9 ++- modules/study/src/main/StudyInvite.scala | 4 +- modules/study/src/main/StudyMaker.scala | 2 +- modules/study/src/main/StudyPager.scala | 5 +- .../study/src/main/StudyPgnImportNew.scala | 22 +++---- modules/study/src/main/StudyRepo.scala | 5 +- modules/study/src/main/StudySequencer.scala | 1 - modules/study/src/main/StudySocket.scala | 4 +- modules/study/src/main/StudyTopic.scala | 1 - modules/study/src/main/TreeBuilder.scala | 8 +-- modules/study/src/main/ui/ListUi.scala | 5 +- modules/study/src/main/ui/StudyBits.scala | 5 +- modules/study/src/main/ui/StudyUi.scala | 5 +- modules/study/src/test/BsonHandlersTest.scala | 17 ++---- modules/study/src/test/Helpers.scala | 9 ++- modules/study/src/test/JsonTest.scala | 15 +++-- modules/study/src/test/NewTreeCheck.scala | 21 +++---- modules/study/src/test/PgnDumpTest.scala | 6 +- modules/study/src/test/PgnRoundTripTest.scala | 19 ++---- modules/study/src/test/StudyArbitraries.scala | 28 +++++---- modules/study/src/test/newTreeTest.scala | 16 +---- modules/studySearch/src/main/Env.scala | 7 +-- .../studySearch/src/main/StudySearchApi.scala | 4 +- modules/swiss/src/main/Env.scala | 2 +- modules/swiss/src/main/Swiss.scala | 4 +- modules/swiss/src/main/SwissApi.scala | 9 +-- modules/swiss/src/main/SwissCondition.scala | 7 +-- modules/swiss/src/main/SwissFeature.scala | 3 +- modules/swiss/src/main/SwissJson.scala | 4 +- modules/swiss/src/main/SwissNotify.scala | 4 +- modules/swiss/src/main/SwissRankingApi.scala | 4 +- modules/swiss/src/main/SwissRoundPager.scala | 1 + modules/swiss/src/main/SwissSocket.scala | 2 +- modules/swiss/src/main/ui/SwissBitsUi.scala | 4 +- modules/swiss/src/main/ui/SwissFormUi.scala | 12 ++-- modules/swiss/src/main/ui/SwissHomeUi.scala | 1 + modules/swiss/src/main/ui/SwissShow.scala | 11 ++-- modules/team/src/main/BSONHandlers.scala | 2 +- modules/team/src/main/Cached.scala | 3 +- modules/team/src/main/PaginatorBuilder.scala | 4 +- modules/team/src/main/Team.scala | 6 +- modules/team/src/main/TeamApi.scala | 6 +- modules/team/src/main/TeamForm.scala | 4 +- modules/team/src/main/TeamMemberStream.scala | 4 +- modules/team/src/main/TeamRepo.scala | 5 +- modules/team/src/main/TeamSecurity.scala | 2 +- modules/team/src/main/TeamSocket.scala | 2 +- modules/team/src/main/ui/AdminUi.scala | 3 +- modules/team/src/main/ui/FormUi.scala | 8 +-- modules/team/src/main/ui/RequestUi.scala | 1 + modules/team/src/main/ui/TeamUi.scala | 4 +- modules/teamSearch/src/main/Env.scala | 3 +- modules/timeline/src/main/Entry.scala | 2 +- modules/timeline/src/main/EntryApi.scala | 2 +- modules/timeline/src/main/TimelineApi.scala | 4 -- modules/timeline/src/main/TimelineUi.scala | 4 +- modules/title/src/main/Env.scala | 2 +- modules/title/src/main/TitleApi.scala | 8 +-- modules/title/src/main/TitleForm.scala | 5 +- modules/title/src/main/TitleRequest.scala | 9 ++- modules/title/src/main/ui/TitleModUi.scala | 5 +- modules/title/src/main/ui/TitleUi.scala | 14 +---- modules/tournament/src/main/ApiJsonView.scala | 2 +- modules/tournament/src/main/AutoPairing.scala | 2 +- .../tournament/src/main/BSONHandlers.scala | 8 +-- modules/tournament/src/main/JsonView.scala | 17 +++--- .../tournament/src/main/LeaderboardApi.scala | 5 +- .../src/main/LeaderboardIndexer.scala | 2 +- modules/tournament/src/main/PlayerRepo.scala | 7 +-- modules/tournament/src/main/Revolution.scala | 3 +- modules/tournament/src/main/Schedule.scala | 3 +- modules/tournament/src/main/Spotlight.scala | 2 +- modules/tournament/src/main/Tournament.scala | 6 +- .../tournament/src/main/TournamentApi.scala | 11 ++-- .../src/main/TournamentCondition.scala | 8 +-- .../tournament/src/main/TournamentForm.scala | 4 +- .../src/main/TournamentModeration.scala | 2 +- .../tournament/src/main/TournamentRepo.scala | 3 +- .../src/main/TournamentScheduler.scala | 2 +- .../src/main/TournamentShield.scala | 4 +- .../src/main/TournamentSocket.scala | 2 +- .../src/main/TournamentStandingApi.scala | 2 +- .../tournament/src/main/WaitingUsers.scala | 1 - .../tournament/src/main/crud/CrudApi.scala | 2 +- modules/tournament/src/main/model.scala | 1 + .../tournament/src/main/ui/ModerationUi.scala | 1 + .../tournament/src/main/ui/TeamBattleUi.scala | 3 +- .../src/main/ui/TournamentForm.scala | 9 +-- .../src/main/ui/TournamentList.scala | 5 +- .../src/main/ui/TournamentShow.scala | 11 ++-- .../tournament/src/main/ui/TournamentUi.scala | 5 +- .../src/main/ui/UserTournament.scala | 4 +- modules/tree/src/main/Analysis.scala | 4 +- modules/tree/src/main/ParseImport.scala | 4 +- modules/tree/src/main/StatusText.scala | 2 +- modules/tree/src/main/eval.scala | 2 +- modules/tree/src/main/newTree.scala | 17 ++---- modules/tree/src/main/tree.scala | 11 ++-- modules/tutor/src/main/Env.scala | 2 +- modules/tutor/src/main/TutorApi.scala | 2 +- modules/tutor/src/main/TutorBuilder.scala | 4 +- modules/tutor/src/main/TutorCompare.scala | 1 + modules/tutor/src/main/TutorConversion.scala | 1 - modules/tutor/src/main/TutorFishnet.scala | 2 +- modules/tutor/src/main/TutorGlicko.scala | 2 +- modules/tutor/src/main/TutorNumber.scala | 2 +- modules/tutor/src/main/TutorOpening.scala | 1 - modules/tutor/src/main/TutorQueue.scala | 1 - .../tutor/src/main/TutorResourcefulness.scala | 1 - modules/tutor/src/main/model.scala | 3 +- modules/tutor/src/main/package.scala | 2 +- modules/tutor/src/main/ui/PerfUi.scala | 7 +-- modules/tutor/src/main/ui/TutorBits.scala | 1 + modules/tutor/src/main/ui/TutorHome.scala | 3 +- modules/tutor/src/main/ui/TutorOpening.scala | 6 +- modules/tutor/src/main/ui/compare.scala | 7 +-- modules/tutor/src/main/ui/concept.scala | 2 +- modules/tutor/src/main/ui/grade.scala | 6 +- modules/tv/src/main/ChannelSyncActor.scala | 2 +- modules/tv/src/main/Env.scala | 3 - modules/tv/src/main/Tv.scala | 2 +- modules/tv/src/main/TvBroadcast.scala | 5 +- modules/tv/src/main/TvSyncActor.scala | 2 +- modules/ublog/src/main/Env.scala | 2 +- modules/ublog/src/main/UblogApi.scala | 4 +- modules/ublog/src/main/UblogBlog.scala | 3 +- modules/ublog/src/main/UblogForm.scala | 6 +- modules/ublog/src/main/UblogMarkup.scala | 5 +- modules/ublog/src/main/UblogPaginator.scala | 4 +- modules/ublog/src/main/UblogPost.scala | 3 +- modules/ublog/src/main/UblogRank.scala | 5 +- modules/ublog/src/main/ui/UblogFormUi.scala | 6 +- modules/ublog/src/main/ui/UblogPostUi.scala | 2 +- modules/ublog/src/main/ui/UblogUi.scala | 3 +- modules/ui/src/main/Context.scala | 4 +- modules/ui/src/main/helper/AssetHelper.scala | 2 +- modules/ui/src/main/helper/ChessHelper.scala | 5 +- modules/ui/src/main/helper/DateHelper.scala | 2 +- modules/ui/src/main/helper/Form3.scala | 7 ++- modules/ui/src/main/helper/GameHelper.scala | 4 +- modules/ui/src/main/helper/HtmlHelper.scala | 2 +- modules/ui/src/main/helper/I18nHelper.scala | 2 +- modules/ui/src/main/helper/NumberHelper.scala | 1 + modules/ui/src/main/helper/TeamHelper.scala | 4 +- modules/ui/src/main/helper/UserHelper.scala | 4 +- modules/ui/src/main/package.scala | 2 +- modules/ui/src/main/router/LilaRouter.scala | 4 +- modules/ui/src/main/scalatags.scala | 4 +- modules/ui/src/main/ui/AtomUi.scala | 3 +- modules/ui/src/main/ui/bits.scala | 4 +- modules/user/src/main/BSONHandlers.scala | 2 +- modules/user/src/main/Cached.scala | 10 ++-- modules/user/src/main/Env.scala | 1 - modules/user/src/main/JsonView.scala | 8 +-- modules/user/src/main/Profile.scala | 5 +- modules/user/src/main/RankingApi.scala | 7 +-- modules/user/src/main/TotpSecret.scala | 1 + modules/user/src/main/TrophyApi.scala | 2 +- modules/user/src/main/User.scala | 22 +------ modules/user/src/main/UserApi.scala | 13 ++-- modules/user/src/main/UserAuth.scala | 2 +- modules/user/src/main/UserForm.scala | 11 +--- modules/user/src/main/UserPerfsRepo.scala | 9 ++- modules/user/src/main/UserRepo.scala | 16 ++--- modules/user/src/main/ui/NoteUi.scala | 6 +- modules/user/src/main/ui/UserBits.scala | 3 +- .../user/src/main/ui/UserGamesDownload.scala | 1 + modules/user/src/main/ui/UserList.scala | 8 +-- modules/user/src/main/ui/UserShow.scala | 5 +- modules/user/src/main/ui/UserShowSide.scala | 5 +- modules/video/src/main/VideoApi.scala | 2 +- modules/video/src/main/Youtube.scala | 3 +- modules/video/src/main/ui/VideoUi.scala | 3 +- modules/web/src/main/AnnounceApi.scala | 2 +- modules/web/src/main/AssetManifest.scala | 7 ++- modules/web/src/main/CtrlErrors.scala | 4 +- modules/web/src/main/CtrlExtensions.scala | 5 +- modules/web/src/main/Env.scala | 2 +- modules/web/src/main/GitHub.scala | 1 + modules/web/src/main/InfluxEvent.scala | 2 +- modules/web/src/main/Limiters.scala | 2 +- modules/web/src/main/PlayServer.scala | 3 +- modules/web/src/main/ReferrerRedirect.scala | 1 + modules/web/src/main/ResponseBuilder.scala | 4 -- modules/web/src/main/ResponseWriter.scala | 1 - modules/web/src/main/StaticContent.scala | 2 +- modules/web/src/main/TheftPrevention.scala | 5 +- modules/web/src/main/WebConfig.scala | 4 +- .../web/src/main/helper/AssetFullHelper.scala | 9 ++- modules/web/src/main/ui/AuthUi.scala | 8 +-- modules/web/src/main/ui/BoardEditorUi.scala | 7 ++- modules/web/src/main/ui/CaptchaUi.scala | 6 +- modules/web/src/main/ui/DevUi.scala | 3 +- modules/web/src/main/ui/DgtUi.scala | 2 +- modules/web/src/main/ui/FaqUi.scala | 1 + modules/web/src/main/ui/LearnUi.scala | 3 +- modules/web/src/main/ui/SiteMessage.scala | 1 + modules/web/src/main/ui/SitePages.scala | 4 +- modules/web/src/main/ui/TopNav.scala | 1 + modules/web/src/main/ui/bits.scala | 8 +-- modules/web/src/main/ui/contact.scala | 5 +- modules/web/src/main/ui/help.scala | 3 +- modules/web/src/main/ui/layout.scala | 5 +- modules/web/src/main/ui/mobile.scala | 3 +- modules/web/src/main/ui/openGraph.scala | 3 +- 800 files changed, 1578 insertions(+), 2009 deletions(-) diff --git a/app/Env.scala b/app/Env.scala index 75ca13d1a916..e0b516e28d11 100644 --- a/app/Env.scala +++ b/app/Env.scala @@ -4,12 +4,9 @@ import akka.actor.* import com.softwaremill.macwire.* import play.api.libs.ws.StandaloneWSClient import play.api.mvc.{ ControllerComponents, SessionCookieBaker } -import play.api.{ Configuration, Environment, Mode, ConfigLoader } +import play.api.{ ConfigLoader, Configuration, Environment, Mode } import lila.core.config.* -import lila.common.config.given -import lila.common.autoconfig.{ *, given } -import lila.core.data.{ Strings, UserIds } import lila.core.i18n.Translator final class Env( diff --git a/app/Lila.scala b/app/Lila.scala index d4c357383070..7d538aa293fa 100644 --- a/app/Lila.scala +++ b/app/Lila.scala @@ -1,7 +1,7 @@ package lila.app -import play.api.inject.DefaultApplicationLifecycle import play.api.Configuration +import play.api.inject.DefaultApplicationLifecycle // The program entry point. // To run with bloop: diff --git a/app/controllers/Account.scala b/app/controllers/Account.scala index a1fbb6d197fc..15dfe5daf2de 100644 --- a/app/controllers/Account.scala +++ b/app/controllers/Account.scala @@ -3,13 +3,12 @@ package controllers import play.api.data.Form import play.api.libs.json.* import play.api.mvc.* -import scalatags.Text.Frag +import views.account.pages -import lila.web.AnnounceApi import lila.app.{ *, given } import lila.common.HTTPRequest import lila.security.SecurityForm.Reopen -import views.account.pages +import lila.web.AnnounceApi final class Account( env: Env, diff --git a/app/controllers/Analyse.scala b/app/controllers/Analyse.scala index cc9dc3c65932..16320e583864 100644 --- a/app/controllers/Analyse.scala +++ b/app/controllers/Analyse.scala @@ -6,10 +6,10 @@ import play.api.mvc.* import lila.app.{ *, given } import lila.common.HTTPRequest -import lila.game.{ PgnDump, Pov } +import lila.core.misc.lpv.LpvEmbed +import lila.game.PgnDump import lila.oauth.AccessToken import lila.tree.ExportOptions -import lila.core.misc.lpv.LpvEmbed final class Analyse( env: Env, diff --git a/app/controllers/Api.scala b/app/controllers/Api.scala index d646ed279cef..a4e14d49e8c6 100644 --- a/app/controllers/Api.scala +++ b/app/controllers/Api.scala @@ -8,12 +8,11 @@ import lila.api.GameApiV2 import lila.app.{ *, given } import lila.common.HTTPRequest import lila.common.Json.given -import lila.core.LightUser -import lila.core.net.IpAddress import lila.core.chess.MultiPv +import lila.core.net.IpAddress +import lila.core.{ LightUser, id } import lila.gathering.Condition.GetMyTeamIds import lila.security.Mobile -import lila.core.id final class Api( env: Env, @@ -187,7 +186,6 @@ final class Api( def tournamentResults(id: TourId) = Anon: val csv = HTTPRequest.acceptsCsv(req) || get("as").has("csv") env.tournament.tournamentRepo.byId(id).orNotFound { tour => - import lila.tournament.JsonView.playerResultWrites val withSheet = getBool("sheet") val perSecond = MaxPerSecond: if withSheet diff --git a/app/controllers/Auth.scala b/app/controllers/Auth.scala index c9370ddbba3f..50a5a1b646b6 100644 --- a/app/controllers/Auth.scala +++ b/app/controllers/Auth.scala @@ -6,12 +6,12 @@ import play.api.mvc.* import lila.app.{ *, given } import lila.common.HTTPRequest import lila.common.Json.given -import lila.security.SecurityForm.{ MagicLink, PasswordReset } -import lila.security.{ FingerPrint, Signup } +import lila.core.email.{ UserIdOrEmail, UserStrOrEmail } import lila.core.net.IpAddress -import lila.core.email.{ UserStrOrEmail, UserIdOrEmail } import lila.core.security.ClearPassword import lila.memo.RateLimit +import lila.security.SecurityForm.{ MagicLink, PasswordReset } +import lila.security.{ FingerPrint, Signup } final class Auth( env: Env, diff --git a/app/controllers/BulkPairing.scala b/app/controllers/BulkPairing.scala index 7abc65185196..c15f3f009cfb 100644 --- a/app/controllers/BulkPairing.scala +++ b/app/controllers/BulkPairing.scala @@ -2,10 +2,10 @@ package controllers import play.api.libs.json.* +import lila.api.GameApiV2 import lila.app.* -import lila.common.Json.given import lila.challenge.ChallengeBulkSetup -import lila.api.GameApiV2 +import lila.common.Json.given final class BulkPairing(gameC: => Game, apiC: => Api, env: Env) extends LilaController(env): diff --git a/app/controllers/Challenge.scala b/app/controllers/Challenge.scala index 070426baceb2..2b15d9896fca 100644 --- a/app/controllers/Challenge.scala +++ b/app/controllers/Challenge.scala @@ -4,15 +4,13 @@ import play.api.libs.json.Json import play.api.mvc.{ RequestHeader, Result } import lila.app.{ *, given } -import lila.challenge.Challenge as ChallengeModel -import lila.core.net.{ Bearer, IpAddress } +import lila.challenge.{ Challenge as ChallengeModel, Direction } import lila.core.id.ChallengeId -import lila.game.{ AnonCookie } +import lila.core.net.Bearer +import lila.core.socket.SocketVersion +import lila.game.AnonCookie import lila.oauth.{ EndpointScopes, OAuthScope, OAuthServer } import lila.setup.ApiConfig -import lila.core.socket.SocketVersion -import lila.challenge.Direction -import lila.common.Json.given final class Challenge( env: Env, @@ -359,7 +357,6 @@ final class Challenge( config => limit .challenge(req.ipAddress, rateLimited): - import lila.challenge.Challenge.* env.challenge.api .createOpen(config) .map: challenge => diff --git a/app/controllers/Clas.scala b/app/controllers/Clas.scala index 63958ba49404..9d6412f3674d 100644 --- a/app/controllers/Clas.scala +++ b/app/controllers/Clas.scala @@ -2,14 +2,14 @@ package controllers package clas import akka.stream.scaladsl.* -import play.api.mvc.* import play.api.data.Form +import play.api.mvc.* import lila.app.{ *, given } import lila.clas.ClasForm.ClasData import lila.clas.ClasInvite -import lila.core.security.ClearPassword import lila.core.id.{ ClasId, ClasInviteId } +import lila.core.security.ClearPassword final class Clas(env: Env, authC: Auth) extends LilaController(env): diff --git a/app/controllers/Dasher.scala b/app/controllers/Dasher.scala index 06b99bcb19c3..aa60bac906e3 100644 --- a/app/controllers/Dasher.scala +++ b/app/controllers/Dasher.scala @@ -5,9 +5,8 @@ import play.api.libs.ws.JsonBodyReadables.* import play.api.libs.ws.StandaloneWSClient import lila.app.{ *, given } -import lila.common.Json.lightUserWrites import lila.core.i18n.{ I18nKey as trans, defaultLang } -import lila.i18n.{ LangPicker, LangList } +import lila.i18n.{ LangList, LangPicker } import lila.pref.ui.DasherJson final class Dasher(env: Env)(using ws: StandaloneWSClient) extends LilaController(env): diff --git a/app/controllers/Export.scala b/app/controllers/Export.scala index e9d994dd747e..6159e3308a94 100644 --- a/app/controllers/Export.scala +++ b/app/controllers/Export.scala @@ -2,15 +2,13 @@ package controllers import akka.stream.scaladsl.* import akka.util.ByteString - import chess.format.{ Fen, Uci } import chess.variant.Variant import play.api.mvc.Result import lila.app.* -import lila.core.net.IpAddress -import lila.pref.{ PieceSet, Theme } import lila.core.id.PuzzleId +import lila.pref.{ PieceSet, Theme } final class Export(env: Env) extends LilaController(env): diff --git a/app/controllers/Fishnet.scala b/app/controllers/Fishnet.scala index 4afabff0a6e7..ef727f8a4fa3 100644 --- a/app/controllers/Fishnet.scala +++ b/app/controllers/Fishnet.scala @@ -1,9 +1,9 @@ package controllers +import monocle.syntax.all.* import play.api.libs.json.* import play.api.mvc.* -import monocle.syntax.all.* import scala.util.{ Failure, Success } import lila.app.* diff --git a/app/controllers/ForumCateg.scala b/app/controllers/ForumCateg.scala index cc62a504da88..1590a2ec32f9 100644 --- a/app/controllers/ForumCateg.scala +++ b/app/controllers/ForumCateg.scala @@ -1,10 +1,8 @@ package controllers import lila.app.{ *, given } -import lila.core.config -import lila.core.id.{ ForumCategId, ForumTopicId } +import lila.core.id.ForumCategId import lila.forum.ForumCateg.{ diagnosticId, ublogId } -import lila.team.Team final class ForumCateg(env: Env) extends LilaController(env) with ForumController: diff --git a/app/controllers/ForumController.scala b/app/controllers/ForumController.scala index 44fbe23e0245..ff5def497732 100644 --- a/app/controllers/ForumController.scala +++ b/app/controllers/ForumController.scala @@ -3,8 +3,8 @@ package controllers import play.api.mvc.* import lila.app.{ *, given } -import lila.forum.ForumTopic import lila.core.id.{ ForumCategId, ForumTopicId } +import lila.forum.ForumTopic private[controllers] trait ForumController: self: LilaController => diff --git a/app/controllers/ForumPost.scala b/app/controllers/ForumPost.scala index 3661e13cfc79..a0157fae5fbf 100644 --- a/app/controllers/ForumPost.scala +++ b/app/controllers/ForumPost.scala @@ -1,9 +1,8 @@ package controllers import lila.app.{ *, given } -import lila.core.net.IpAddress import lila.core.i18n.I18nKey as trans -import lila.core.id.{ ForumCategId, ForumTopicId } +import lila.core.id.ForumCategId import lila.msg.MsgPreset final class ForumPost(env: Env) extends LilaController(env) with ForumController: diff --git a/app/controllers/ForumTopic.scala b/app/controllers/ForumTopic.scala index f5820c4927aa..ab5e5accc0a1 100644 --- a/app/controllers/ForumTopic.scala +++ b/app/controllers/ForumTopic.scala @@ -3,10 +3,9 @@ package controllers import play.api.libs.json.* import lila.app.{ *, given } -import lila.core.net.IpAddress -import lila.forum.ForumCateg.diagnosticId import lila.common.Json.given import lila.core.id.{ ForumCategId, ForumTopicId } +import lila.forum.ForumCateg.diagnosticId final class ForumTopic(env: Env) extends LilaController(env) with ForumController: diff --git a/app/controllers/Game.scala b/app/controllers/Game.scala index cdbc9e5d5f47..3a94cb9665ee 100644 --- a/app/controllers/Game.scala +++ b/app/controllers/Game.scala @@ -7,8 +7,6 @@ import java.time.format.DateTimeFormatter import lila.api.GameApiV2 import lila.app.{ *, given } import lila.common.HTTPRequest - -import lila.rating.PerfType import lila.core.id.GameAnyId final class Game(env: Env, apiC: => Api) extends LilaController(env): diff --git a/app/controllers/GameMod.scala b/app/controllers/GameMod.scala index 07156d2df28e..e816f34d7f87 100644 --- a/app/controllers/GameMod.scala +++ b/app/controllers/GameMod.scala @@ -1,10 +1,6 @@ package controllers - -import play.api.data.* - import lila.api.GameApiV2 import lila.app.{ *, given } -import lila.core.config final class GameMod(env: Env)(using akka.stream.Materializer) extends LilaController(env): diff --git a/app/controllers/Github.scala b/app/controllers/Github.scala index 166ccdbf59f2..b5f371c017f5 100644 --- a/app/controllers/Github.scala +++ b/app/controllers/Github.scala @@ -3,7 +3,7 @@ package controllers import play.api.libs.json.* import play.api.mvc.* -import lila.app.{ *, given } +import lila.app.* final class Github(env: Env) extends LilaController(env): diff --git a/app/controllers/Importer.scala b/app/controllers/Importer.scala index 6be2a92bd207..3a5822e7a5b8 100644 --- a/app/controllers/Importer.scala +++ b/app/controllers/Importer.scala @@ -1,16 +1,14 @@ package controllers -import scala.util.{ Either, Left, Right } -import chess.ErrorStr import chess.format.pgn.PgnStr import play.api.libs.json.Json import play.api.mvc.* +import scala.util.{ Either, Left, Right } + import lila.app.{ *, given } import lila.common.HTTPRequest import lila.common.Json.given -import lila.core.net.IpAddress -import lila.game.GameExt.analysable final class Importer(env: Env) extends LilaController(env): diff --git a/app/controllers/Insight.scala b/app/controllers/Insight.scala index 5516f07c3c03..e58875d6af66 100644 --- a/app/controllers/Insight.scala +++ b/app/controllers/Insight.scala @@ -1,12 +1,10 @@ package controllers - -import play.api.i18n.Lang import play.api.libs.json.{ JsValue, Json } import play.api.mvc.* import lila.app.{ *, given } -import lila.insight.{ InsightDimension, InsightMetric } import lila.core.i18n.Translate +import lila.insight.{ InsightDimension, InsightMetric } final class Insight(env: Env) extends LilaController(env): diff --git a/app/controllers/LilaController.scala b/app/controllers/LilaController.scala index 48492ebd6ee7..8f45d61662f6 100644 --- a/app/controllers/LilaController.scala +++ b/app/controllers/LilaController.scala @@ -2,17 +2,16 @@ package controllers import play.api.data.{ Form, FormBinding } import play.api.http.* -import play.api.i18n.Lang import play.api.libs.json.Writes import play.api.mvc.* import lila.app.{ *, given } -import lila.common.{ HTTPRequest, config } -import lila.i18n.LangPicker +import lila.common.HTTPRequest import lila.core.i18n.Language -import lila.oauth.{ EndpointScopes, OAuthScope, OAuthScopes, OAuthServer, TokenScopes } -import lila.core.perm.Permission import lila.core.perf.UserWithPerfs +import lila.core.perm.Permission +import lila.i18n.LangPicker +import lila.oauth.{ EndpointScopes, OAuthScope, OAuthScopes, OAuthServer, TokenScopes } import lila.ui.{ Page, Snippet } abstract private[controllers] class LilaController(val env: Env) diff --git a/app/controllers/Main.scala b/app/controllers/Main.scala index 4dfe022958fd..9e2ab5063ca2 100644 --- a/app/controllers/Main.scala +++ b/app/controllers/Main.scala @@ -1,15 +1,11 @@ package controllers - -import play.api.data.* import play.api.libs.json.* import play.api.mvc.* import lila.app.{ *, given } import lila.common.HTTPRequest import lila.core.id.GameFullId - -import lila.core.net.Bearer -import lila.web.{ WebForms, StaticContent } +import lila.web.{ StaticContent, WebForms } final class Main( env: Env, diff --git a/app/controllers/Mod.scala b/app/controllers/Mod.scala index c2c37bd42d69..12ed19b5b88a 100644 --- a/app/controllers/Mod.scala +++ b/app/controllers/Mod.scala @@ -8,12 +8,12 @@ import scala.annotation.nowarn import lila.app.{ *, given } import lila.common.HTTPRequest +import lila.core.net.IpAddress import lila.core.perm.Permission -import lila.mod.ModUserSearch -import lila.report.{ Mod as AsMod, Suspect } import lila.core.security.FingerHash -import lila.core.net.IpAddress import lila.core.userId.ModId +import lila.mod.ModUserSearch +import lila.report.{ Mod as AsMod, Suspect } final class Mod( env: Env, diff --git a/app/controllers/OAuth.scala b/app/controllers/OAuth.scala index 2a1c86c398b0..babdc53aded3 100644 --- a/app/controllers/OAuth.scala +++ b/app/controllers/OAuth.scala @@ -1,17 +1,17 @@ package controllers -import scalalib.ThreadLocalRandom import play.api.libs.json.{ JsNull, JsObject, JsValue, Json } import play.api.mvc.* +import scalalib.ThreadLocalRandom import scalatags.Text.all.stringFrag import lila.app.* +import lila.common.HTTPRequest import lila.common.Json.given -import lila.core.net.{ Bearer, IpAddress } +import lila.core.net.Bearer import lila.oauth.{ AccessTokenRequest, AuthorizationRequest, OAuthScopes } import Api.ApiResult -import lila.common.HTTPRequest final class OAuth(env: Env, apiC: => Api) extends LilaController(env): diff --git a/app/controllers/Opening.scala b/app/controllers/Opening.scala index 5a3e394e787e..df79c538fe1a 100644 --- a/app/controllers/Opening.scala +++ b/app/controllers/Opening.scala @@ -4,8 +4,8 @@ import play.api.mvc.* import lila.app.{ *, given } import lila.common.HTTPRequest -import lila.opening.OpeningQuery.queryFromUrl import lila.core.net.Crawler +import lila.opening.OpeningQuery.queryFromUrl final class Opening(env: Env) extends LilaController(env): diff --git a/app/controllers/Plan.scala b/app/controllers/Plan.scala index 67479b93e464..e7b270ddf01a 100644 --- a/app/controllers/Plan.scala +++ b/app/controllers/Plan.scala @@ -2,6 +2,7 @@ package controllers import play.api.libs.json.* import play.api.mvc.* + import java.util.Currency import lila.app.{ *, given } diff --git a/app/controllers/PlayApi.scala b/app/controllers/PlayApi.scala index 4763fb590744..31586e9608b5 100644 --- a/app/controllers/PlayApi.scala +++ b/app/controllers/PlayApi.scala @@ -4,8 +4,8 @@ import play.api.i18n.Lang import play.api.mvc.* import lila.app.* -import lila.core.perf.UserWithPerfs import lila.core.id.GameAnyId +import lila.core.perf.UserWithPerfs // both bot & board APIs final class PlayApi(env: Env, apiC: => Api)(using akka.stream.Materializer) extends LilaController(env): diff --git a/app/controllers/Puzzle.scala b/app/controllers/Puzzle.scala index 76f4fd6e6dbf..4bf153df0b55 100644 --- a/app/controllers/Puzzle.scala +++ b/app/controllers/Puzzle.scala @@ -6,9 +6,9 @@ import play.api.mvc.* import lila.app.{ *, given } import lila.common.Json.given -import lila.core.net.ApiVersion -import lila.ui.LangPath +import lila.core.i18n.{ Language, Translate } import lila.core.id.PuzzleId +import lila.core.net.ApiVersion import lila.puzzle.{ Puzzle as Puz, PuzzleAngle, @@ -19,9 +19,7 @@ import lila.puzzle.{ PuzzleTheme } import lila.rating.PerfType -import lila.core.i18n.Translate -import lila.core.user.WithPerf -import lila.core.i18n.Language +import lila.ui.LangPath final class Puzzle(env: Env, apiC: => Api) extends LilaController(env): diff --git a/app/controllers/Relation.scala b/app/controllers/Relation.scala index dea6e16491cb..cd91f2045371 100644 --- a/app/controllers/Relation.scala +++ b/app/controllers/Relation.scala @@ -3,14 +3,14 @@ package controllers import play.api.libs.json.{ Json, Writes } import play.api.mvc.Result import scalalib.Json.given +import scalalib.paginator.{ AdapterLike, Paginator } import lila.app.{ *, given } -import scalalib.paginator.{ AdapterLike, Paginator } import lila.core.LightUser -import lila.relation.Related -import lila.relation.RelationStream.* import lila.core.perf.UserWithPerfs import lila.rating.UserPerfsExt.bestRatedPerf +import lila.relation.Related +import lila.relation.RelationStream.* final class Relation(env: Env, apiC: => Api) extends LilaController(env): diff --git a/app/controllers/RelayRound.scala b/app/controllers/RelayRound.scala index a6e3748d3f3b..955556a76702 100644 --- a/app/controllers/RelayRound.scala +++ b/app/controllers/RelayRound.scala @@ -8,9 +8,9 @@ import scala.annotation.nowarn import lila.app.{ *, given } import lila.common.HTTPRequest -import lila.relay.{ RelayRound as RoundModel, RelayTour as TourModel } -import lila.relay.ui.FormNavigation import lila.core.id.{ RelayRoundId, RelayTourId } +import lila.relay.ui.FormNavigation +import lila.relay.{ RelayRound as RoundModel, RelayTour as TourModel } final class RelayRound( env: Env, diff --git a/app/controllers/RelayTour.scala b/app/controllers/RelayTour.scala index c04b581aa592..6e6ed0028c1c 100644 --- a/app/controllers/RelayTour.scala +++ b/app/controllers/RelayTour.scala @@ -1,13 +1,13 @@ package controllers import play.api.mvc.* - import scalalib.Json.given + import lila.app.{ *, given } +import lila.core.id.RelayTourId import lila.core.net.IpAddress import lila.relay.RelayTour as TourModel import lila.relay.ui.FormNavigation -import lila.core.id.RelayTourId final class RelayTour(env: Env, apiC: => Api) extends LilaController(env): diff --git a/app/controllers/Report.scala b/app/controllers/Report.scala index 803f4e9f3230..d9725a7cee60 100644 --- a/app/controllers/Report.scala +++ b/app/controllers/Report.scala @@ -7,9 +7,9 @@ import play.api.mvc.{ AnyContentAsFormUrlEncoded, Result } import lila.app.{ *, given } import lila.common.HTTPRequest import lila.core.id.ReportId -import lila.report.{ Mod as AsMod, Report as ReportModel, Reporter, Room, Suspect } -import lila.report.Room.Scores import lila.mod.ui.PendingCounts +import lila.report.Room.Scores +import lila.report.{ Mod as AsMod, Report as ReportModel, Reporter, Room, Suspect } final class Report(env: Env, userC: => User, modC: => Mod) extends LilaController(env): diff --git a/app/controllers/Round.scala b/app/controllers/Round.scala index c820f1c3a0f8..2033aa90dee4 100644 --- a/app/controllers/Round.scala +++ b/app/controllers/Round.scala @@ -5,12 +5,12 @@ import play.api.mvc.* import lila.app.{ *, given } import lila.chat.Chat -import lila.common.Json.given import lila.common.HTTPRequest -import lila.tournament.Tournament as Tour +import lila.common.Json.given import lila.core.data.Preload -import lila.core.id.{ GameFullId, GameAnyId } +import lila.core.id.{ GameAnyId, GameFullId } import lila.round.RoundGame.* +import lila.tournament.Tournament as Tour import lila.ui.Snippet final class Round( diff --git a/app/controllers/Search.scala b/app/controllers/Search.scala index 4f4071c4b0cb..43be327f6550 100644 --- a/app/controllers/Search.scala +++ b/app/controllers/Search.scala @@ -1,9 +1,5 @@ package controllers - -import play.api.i18n.Lang - import lila.app.{ *, given } -import lila.core.net.IpAddress import lila.core.i18n.Translate final class Search(env: Env) extends LilaController(env): diff --git a/app/controllers/Setup.scala b/app/controllers/Setup.scala index 62c5d85c372c..07374a7e099a 100644 --- a/app/controllers/Setup.scala +++ b/app/controllers/Setup.scala @@ -2,18 +2,14 @@ package controllers import chess.format.Fen import play.api.libs.json.Json -import play.api.mvc.{ Request, Result, EssentialAction } +import play.api.mvc.{ EssentialAction, Result } import lila.app.{ *, given } -import lila.core.net.IpAddress import lila.common.HTTPRequest -import lila.game.{ AnonCookie, Pov } -import lila.memo.RateLimit - +import lila.core.socket.Sri +import lila.game.AnonCookie import lila.setup.Processor.HookResult import lila.setup.ValidFen -import lila.core.socket.Sri -import lila.game.GameExt.perfType final class Setup( env: Env, diff --git a/app/controllers/Study.scala b/app/controllers/Study.scala index 343de50efc2a..ce49038b55a7 100644 --- a/app/controllers/Study.scala +++ b/app/controllers/Study.scala @@ -3,22 +3,22 @@ package controllers import play.api.libs.json.* import play.api.mvc.* import scalalib.Json.given +import scalalib.paginator.Paginator import lila.analyse.Analysis import lila.app.{ *, given } -import scalalib.paginator.Paginator import lila.common.{ Bus, HTTPRequest } +import lila.core.id.RelayRoundId +import lila.core.misc.lpv.LpvEmbed +import lila.core.net.IpAddress import lila.core.socket.Sri +import lila.core.study.Order import lila.study.JsonView.JsData +import lila.study.PgnDump.WithFlags import lila.study.Study.WithChapter import lila.study.actorApi.{ BecomeStudyAdmin, Who } -import lila.study.{ Chapter, Settings, Orders, Study as StudyModel, StudyForm } -import lila.study.PgnDump.WithFlags +import lila.study.{ Chapter, Orders, Settings, Study as StudyModel, StudyForm } import lila.tree.Node.partitionTreeJsonWriter -import lila.core.misc.lpv.LpvEmbed -import lila.core.net.IpAddress -import lila.core.id.RelayRoundId -import lila.core.study.Order final class Study( env: Env, diff --git a/app/controllers/Team.scala b/app/controllers/Team.scala index 5dd3e3822576..923cd5847afe 100644 --- a/app/controllers/Team.scala +++ b/app/controllers/Team.scala @@ -1,8 +1,8 @@ package controllers package team -import play.api.libs.json.* import play.api.data.Form +import play.api.libs.json.* import play.api.mvc.* import lila.app.{ *, given } diff --git a/app/controllers/TeamApi.scala b/app/controllers/TeamApi.scala index 32f961d5bc1c..c6bd065dd75f 100644 --- a/app/controllers/TeamApi.scala +++ b/app/controllers/TeamApi.scala @@ -5,7 +5,6 @@ import play.api.mvc.* import scalalib.Json.given import lila.app.{ *, given } -import lila.core.net.IpAddress import lila.team.{ Team as TeamModel, TeamSecurity } import Api.ApiResult diff --git a/app/controllers/Timeline.scala b/app/controllers/Timeline.scala index d34482cc5a57..1c5d61de7595 100644 --- a/app/controllers/Timeline.scala +++ b/app/controllers/Timeline.scala @@ -5,7 +5,6 @@ import play.api.libs.json.* import lila.app.{ *, given } import lila.common.HTTPRequest import lila.common.Json.given - import lila.timeline.Entry.given final class Timeline(env: Env) extends LilaController(env): diff --git a/app/controllers/TitleVerify.scala b/app/controllers/TitleVerify.scala index ef1ea5b1e345..07c27f299d24 100644 --- a/app/controllers/TitleVerify.scala +++ b/app/controllers/TitleVerify.scala @@ -1,11 +1,7 @@ package controllers - -import play.api.libs.json.* - import lila.app.{ *, given } +import lila.core.id.{ CmsPageKey, TitleRequestId } import lila.title.TitleRequest -import lila.core.id.{ TitleRequestId, CmsPageKey } -import org.checkerframework.checker.units.qual.s final class TitleVerify(env: Env, cmsC: => Cms, reportC: => report.Report, userC: => User, modC: => Mod) extends LilaController(env): diff --git a/app/controllers/Tournament.scala b/app/controllers/Tournament.scala index 053534be6fda..bec88bb37614 100644 --- a/app/controllers/Tournament.scala +++ b/app/controllers/Tournament.scala @@ -4,12 +4,12 @@ import play.api.libs.json.* import play.api.mvc.* import lila.app.{ *, given } -import lila.common.Json.given import lila.common.HTTPRequest +import lila.common.Json.given +import lila.core.data.Preload import lila.gathering.Condition.GetMyTeamIds import lila.memo.CacheApi.* -import lila.tournament.{ MyInfo, Tournament as Tour, TournamentForm, VisibleTournaments } -import lila.core.data.Preload +import lila.tournament.{ MyInfo, Tournament as Tour, TournamentForm } final class Tournament(env: Env, apiC: => Api)(using akka.stream.Materializer) extends LilaController(env): diff --git a/app/controllers/Tutor.scala b/app/controllers/Tutor.scala index 14465dca907c..66ddbec289d3 100644 --- a/app/controllers/Tutor.scala +++ b/app/controllers/Tutor.scala @@ -4,10 +4,9 @@ import play.api.mvc.* import lila.app.{ *, given } import lila.common.LilaOpeningFamily - +import lila.core.perf.UserWithPerfs import lila.rating.PerfType import lila.tutor.{ TutorFullReport, TutorPerfReport, TutorQueue } -import lila.core.perf.UserWithPerfs final class Tutor(env: Env) extends LilaController(env): diff --git a/app/controllers/Tv.scala b/app/controllers/Tv.scala index 77a7e05dd8ad..bc330468426b 100644 --- a/app/controllers/Tv.scala +++ b/app/controllers/Tv.scala @@ -1,9 +1,9 @@ package controllers import play.api.http.ContentTypes +import play.api.libs.EventSource import play.api.libs.json.* import play.api.mvc.Result -import play.api.libs.EventSource import lila.app.{ *, given } import lila.common.Json.given diff --git a/app/controllers/Ublog.scala b/app/controllers/Ublog.scala index 3a4374a1ecc4..8b19ef9ada69 100644 --- a/app/controllers/Ublog.scala +++ b/app/controllers/Ublog.scala @@ -4,9 +4,8 @@ import play.api.i18n.Lang import play.api.mvc.Result import lila.app.{ *, given } -import lila.core.config import lila.core.i18n.Language -import lila.i18n.{ LangPicker, LangList } +import lila.i18n.{ LangList, LangPicker } import lila.report.Suspect import lila.ublog.{ UblogBlog, UblogPost, UblogRank } diff --git a/app/controllers/User.scala b/app/controllers/User.scala index f7a138abd28e..add127d951ea 100644 --- a/app/controllers/User.scala +++ b/app/controllers/User.scala @@ -5,21 +5,20 @@ import play.api.http.ContentTypes import play.api.libs.EventSource import play.api.libs.json.* import play.api.mvc.* +import scalalib.paginator.Paginator import scalatags.Text.Frag -import lila.game.{ GameFilter, GameFilterMenu } import lila.app.{ *, given } -import scalalib.paginator.Paginator import lila.common.HTTPRequest import lila.common.Json.given -import lila.mod.UserWithModlog -import lila.security.UserLogins -import lila.user.WithPerfsAndEmails -import lila.rating.PerfType -import lila.core.net.IpAddress import lila.core.user.LightPerf import lila.core.userId.UserSearch +import lila.game.GameFilter +import lila.mod.UserWithModlog +import lila.rating.PerfType import lila.rating.UserPerfsExt.best8Perfs +import lila.security.UserLogins +import lila.user.WithPerfsAndEmails final class User( override val env: Env, diff --git a/app/controllers/UserAnalysis.scala b/app/controllers/UserAnalysis.scala index 3ac8eea958dc..ca765d82078d 100644 --- a/app/controllers/UserAnalysis.scala +++ b/app/controllers/UserAnalysis.scala @@ -8,9 +8,8 @@ import play.api.mvc.* import lila.app.{ *, given } import lila.common.HTTPRequest - -import lila.tree.ExportOptions import lila.core.id.GameFullId +import lila.tree.ExportOptions final class UserAnalysis( env: Env, diff --git a/app/http/KeyPages.scala b/app/http/KeyPages.scala index 661c6c73f797..30003c3c0a00 100644 --- a/app/http/KeyPages.scala +++ b/app/http/KeyPages.scala @@ -3,7 +3,6 @@ package http import play.api.libs.json.Json import play.api.mvc.* -import scalatags.Text.all.Frag import lila.app.{ *, given } import lila.memo.CacheApi.* diff --git a/app/http/ResponseBuilder.scala b/app/http/ResponseBuilder.scala index 854a51f9a2aa..330ae9a6f99e 100644 --- a/app/http/ResponseBuilder.scala +++ b/app/http/ResponseBuilder.scala @@ -1,7 +1,5 @@ package lila.app package http - -import akka.stream.scaladsl.Source import alleycats.Zero import play.api.http.* import play.api.libs.json.* diff --git a/app/mashup/GameFilter.scala b/app/mashup/GameFilter.scala index f8e6d75877b3..42998e1c25ed 100644 --- a/app/mashup/GameFilter.scala +++ b/app/mashup/GameFilter.scala @@ -4,12 +4,12 @@ package mashup import play.api.data.FormBinding import play.api.i18n.Lang import play.api.mvc.Request - import scalalib.paginator.Paginator -import lila.db.dsl.* -import lila.game.{ Query, GameFilter, GameFilterMenu } + import lila.core.game.Game import lila.core.user.User +import lila.db.dsl.* +import lila.game.{ GameFilter, GameFilterMenu, Query } object GameFilterMenu: diff --git a/app/mashup/Preload.scala b/app/mashup/Preload.scala index d38dd0d086a8..6670a45c1166 100644 --- a/app/mashup/Preload.scala +++ b/app/mashup/Preload.scala @@ -4,8 +4,9 @@ package mashup import com.github.blemale.scaffeine.AsyncLoadingCache import play.api.libs.json.* +import lila.core.game.Game +import lila.core.perf.UserWithPerfs import lila.event.Event - import lila.playban.TempBan import lila.simul.{ Simul, SimulIsFeaturable } import lila.streamer.LiveStreams @@ -14,8 +15,6 @@ import lila.timeline.Entry import lila.tournament.{ Tournament, Winner } import lila.ublog.UblogPost import lila.user.{ LightUserApi, Me, User } -import lila.core.perf.UserWithPerfs -import lila.core.game.Game final class Preload( tv: lila.tv.Tv, diff --git a/app/mashup/TeamInfo.scala b/app/mashup/TeamInfo.scala index a19b50ec5744..d138836d6c86 100644 --- a/app/mashup/TeamInfo.scala +++ b/app/mashup/TeamInfo.scala @@ -1,13 +1,11 @@ package lila.app package mashup - -import lila.core.forum.ForumPostMini +import lila.core.forum.ForumPostMiniView +import lila.core.user.User import lila.simul.{ Simul, SimulApi } import lila.swiss.{ Swiss, SwissApi } -import lila.team.{ RequestWithUser, Team, TeamApi, TeamMember, TeamRequest, TeamRequestRepo, TeamSecurity } +import lila.team.{ RequestWithUser, Team, TeamApi, TeamMember, TeamRequest, TeamRequestRepo } import lila.tournament.{ Tournament, TournamentApi } -import lila.core.forum.ForumPostMiniView -import lila.core.user.User case class TeamInfo( withLeaders: Team.WithLeaders, diff --git a/app/mashup/UserInfo.scala b/app/mashup/UserInfo.scala index e0cd74883661..73dd8c2a3531 100644 --- a/app/mashup/UserInfo.scala +++ b/app/mashup/UserInfo.scala @@ -4,14 +4,14 @@ package mashup import play.api.data.Form import lila.bookmark.BookmarkApi +import lila.core.data.SafeJsonStr +import lila.core.perf.UserWithPerfs +import lila.core.perm.Granter +import lila.core.user.User import lila.forum.ForumPostApi import lila.game.Crosstable import lila.relation.RelationApi -import lila.core.perm.Granter import lila.ublog.{ UblogApi, UblogPost } -import lila.core.data.SafeJsonStr -import lila.core.perf.UserWithPerfs -import lila.core.user.User case class UserInfo( nbs: UserInfo.NbGames, diff --git a/app/views/activity.scala b/app/views/activity.scala index 6ce908c05454..5cfaafd6101a 100644 --- a/app/views/activity.scala +++ b/app/views/activity.scala @@ -1,7 +1,6 @@ package views.activity import lila.app.UiEnv.{ *, given } - import lila.core.perf.UserWithPerfs private lazy val ui = lila.activity.ui.ActivityUi(helpers)(views.tournament.ui.tournamentIdToName) diff --git a/app/views/analyse/replay.scala b/app/views/analyse/replay.scala index 0f54aecc514d..82ce4e9472db 100644 --- a/app/views/analyse/replay.scala +++ b/app/views/analyse/replay.scala @@ -3,13 +3,11 @@ package views.analyse import chess.format.Fen import chess.format.pgn.PgnStr import chess.variant.Crazyhouse -import play.api.i18n.Lang import play.api.libs.json.Json +import views.analyse.bits.dataPanel import lila.app.UiEnv.{ *, given } import lila.common.Json.given -import views.analyse.bits.dataPanel -import lila.game.GameExt.analysable import lila.round.RoundGame.secondsSinceCreation def replay( diff --git a/app/views/analyse/ui.scala b/app/views/analyse/ui.scala index 7e243cc11345..9d47cd076abb 100644 --- a/app/views/analyse/ui.scala +++ b/app/views/analyse/ui.scala @@ -1,8 +1,7 @@ package views.analyse -import play.api.libs.json.{ Json, JsObject } - import chess.format.pgn.PgnStr +import play.api.libs.json.{ JsObject, Json } import lila.app.UiEnv.{ *, given } diff --git a/app/views/appeal/discussion.scala b/app/views/appeal/discussion.scala index ea1efc7b0d6e..9c9a0ab92815 100644 --- a/app/views/appeal/discussion.scala +++ b/app/views/appeal/discussion.scala @@ -3,11 +3,10 @@ package views.appeal import play.api.data.Form import lila.app.UiEnv.{ *, given } - import lila.appeal.Appeal import lila.common.String.html.richText import lila.mod.IpRender.RenderIp -import lila.mod.{ ModPreset, ModPresets, UserWithModlog } +import lila.mod.{ ModPresets, UserWithModlog } import lila.report.Report.Inquiry import lila.report.Suspect diff --git a/app/views/appeal/queue.scala b/app/views/appeal/queue.scala index 2c68bbee378a..fa7954ef8397 100644 --- a/app/views/appeal/queue.scala +++ b/app/views/appeal/queue.scala @@ -1,11 +1,10 @@ package views.appeal import lila.app.UiEnv.{ *, given } - import lila.appeal.Appeal import lila.appeal.Appeal.Filter -import lila.report.Report.Inquiry import lila.mod.ui.PendingCounts +import lila.report.Report.Inquiry object queue: diff --git a/app/views/base/page.scala b/app/views/base/page.scala index c0b07307c867..3d397fccf2b0 100644 --- a/app/views/base/page.scala +++ b/app/views/base/page.scala @@ -1,11 +1,9 @@ package views.base - -import play.api.i18n.Lang import scalalib.StringUtils.escapeHtmlRaw -import lila.ui.{ RenderedPage, ContentSecurityPolicy } import lila.app.UiEnv.{ *, given } import lila.common.String.html.safeJsonValue +import lila.ui.RenderedPage object page: @@ -34,10 +32,6 @@ object page: ) ) - private def current2dTheme(using ctx: Context) = - if ctx.pref.is3d && ctx.pref.theme == "horsey" then lila.pref.Theme.default - else ctx.pref.currentTheme - def boardStyle(zoomable: Boolean)(using ctx: Context) = s"---board-opacity:${ctx.pref.board.opacity};" + s"---board-brightness:${ctx.pref.board.brightness};" + diff --git a/app/views/clas.scala b/app/views/clas.scala index 96ba3a3720b8..8811ff105f2d 100644 --- a/app/views/clas.scala +++ b/app/views/clas.scala @@ -2,7 +2,6 @@ package views.clas import play.api.data.Form -import lila.ui.ContentSecurityPolicy import lila.app.UiEnv.{ *, given } import lila.clas.{ Clas, Student } diff --git a/app/views/fide.scala b/app/views/fide.scala index 18d32b8bffe3..f52e95f8db23 100644 --- a/app/views/fide.scala +++ b/app/views/fide.scala @@ -2,7 +2,7 @@ package views.fide import scalalib.paginator.Paginator -import lila.app.UiEnv.{ *, given } +import lila.app.UiEnv.* import lila.fide.FidePlayer import lila.relay.RelayTour diff --git a/app/views/game/side.scala b/app/views/game/side.scala index 7eb322f22ae3..bdba20efb64b 100644 --- a/app/views/game/side.scala +++ b/app/views/game/side.scala @@ -1,7 +1,6 @@ package views.game import lila.app.UiEnv.{ *, given } - import lila.game.GameExt.perfType object side: diff --git a/app/views/game/ui.scala b/app/views/game/ui.scala index 2f5ff71bd59e..94c6d9d63f62 100644 --- a/app/views/game/ui.scala +++ b/app/views/game/ui.scala @@ -1,6 +1,6 @@ package views.game -import lila.app.UiEnv.{ *, given } +import lila.app.UiEnv.* val ui = lila.game.ui.GameUi(helpers) export ui.mini diff --git a/app/views/game/widgets.scala b/app/views/game/widgets.scala index a2c2ca984596..b93e9eabbeb4 100644 --- a/app/views/game/widgets.scala +++ b/app/views/game/widgets.scala @@ -1,11 +1,10 @@ package views.game import lila.app.UiEnv.{ *, given } - -import lila.ui.Context -import lila.core.game.{ Player } +import lila.core.game.Player import lila.game.GameExt.perfType import lila.game.Player.nameSplit +import lila.ui.Context object widgets: diff --git a/app/views/insight.scala b/app/views/insight.scala index 75780f41b724..c857f42a2175 100644 --- a/app/views/insight.scala +++ b/app/views/insight.scala @@ -1,6 +1,4 @@ package views.insight - -import play.api.i18n.Lang import play.api.libs.json.Json import lila.app.UiEnv.{ *, given } diff --git a/app/views/lobby/bits.scala b/app/views/lobby/bits.scala index ba745279203d..95228e9a23aa 100644 --- a/app/views/lobby/bits.scala +++ b/app/views/lobby/bits.scala @@ -1,7 +1,6 @@ package views.lobby import lila.app.UiEnv.{ *, given } - import lila.rating.PerfType object bits: diff --git a/app/views/lobby/home.scala b/app/views/lobby/home.scala index fae1cd88bfd9..1301fb243b89 100644 --- a/app/views/lobby/home.scala +++ b/app/views/lobby/home.scala @@ -2,9 +2,8 @@ package views.lobby import play.api.libs.json.Json -import lila.app.mashup.Preload.Homepage import lila.app.UiEnv.{ *, given } - +import lila.app.mashup.Preload.Homepage import lila.core.perf.UserWithPerfs object home: diff --git a/app/views/mod/communication.scala b/app/views/mod/communication.scala index b1615d2569e0..054ac03d6775 100644 --- a/app/views/mod/communication.scala +++ b/app/views/mod/communication.scala @@ -1,7 +1,6 @@ package views.mod import lila.app.UiEnv.{ *, given } - import lila.common.String.html.richText import lila.core.shutup.PublicSource import lila.mod.IpRender.RenderIp diff --git a/app/views/mod/games.scala b/app/views/mod/games.scala index ab0ea67a6171..c0bad2ef6781 100644 --- a/app/views/mod/games.scala +++ b/app/views/mod/games.scala @@ -3,14 +3,12 @@ package views.mod import play.api.data.Form import lila.app.UiEnv.{ *, given } - -import lila.evaluation.PlayerAssessment -import lila.rating.PerfType import lila.core.chess.Rank -import lila.tournament.LeaderboardApi.TourEntry +import lila.evaluation.PlayerAssessment import lila.game.GameExt.* import lila.mod.GameMod import lila.mod.ui.ModUserTableUi.sortNoneTh +import lila.tournament.LeaderboardApi.TourEntry def games( user: User, diff --git a/app/views/mod/inquiry.scala b/app/views/mod/inquiry.scala index aad43f1cc3c1..956f1ed75e39 100644 --- a/app/views/mod/inquiry.scala +++ b/app/views/mod/inquiry.scala @@ -1,10 +1,8 @@ package views.mod import lila.app.UiEnv.{ *, given } - -import lila.common.String.html.richText -import lila.report.{ Reason, Report } import lila.core.id.{ ForumPostId, RelayRoundId } +import lila.report.Report object inquiry: diff --git a/app/views/mod/ui.scala b/app/views/mod/ui.scala index 4e119f55fef3..a1cd795ed0bf 100644 --- a/app/views/mod/ui.scala +++ b/app/views/mod/ui.scala @@ -1,6 +1,6 @@ package views.mod -import lila.app.UiEnv.{ *, given } +import lila.app.UiEnv.* import lila.mod.ui.* lazy val ui = ModUi(helpers)(() => env.chat.panic.enabled) diff --git a/app/views/puzzle/dashboard.scala b/app/views/puzzle/dashboard.scala index 3d68bbb021bd..0eaa181ca2ad 100644 --- a/app/views/puzzle/dashboard.scala +++ b/app/views/puzzle/dashboard.scala @@ -1,9 +1,5 @@ package views.puzzle - -import play.api.libs.json.Json - import lila.app.UiEnv.{ *, given } - import lila.puzzle.{ PuzzleDashboard, PuzzleTheme } object dashboard: diff --git a/app/views/puzzle/ui.scala b/app/views/puzzle/ui.scala index b18b305412e9..332d92c7b07b 100644 --- a/app/views/puzzle/ui.scala +++ b/app/views/puzzle/ui.scala @@ -1,9 +1,6 @@ package views.puzzle - -import scalalib.paginator.Paginator - import lila.app.UiEnv.{ *, given } -import lila.puzzle.{ Puzzle, PuzzleOpening, DailyPuzzle } +import lila.puzzle.DailyPuzzle lazy val bits = lila.puzzle.ui.PuzzleBits(helpers)(views.userAnalysisI18n.cevalTranslations) lazy val ui = lila.puzzle.ui.PuzzleUi(helpers, bits)(views.analyse.ui.csp, externalEngineEndpoint) diff --git a/app/views/report.scala b/app/views/report.scala index 0ee10a7f127c..552eb9abdd34 100644 --- a/app/views/report.scala +++ b/app/views/report.scala @@ -1,13 +1,10 @@ package views.report - -import play.api.data.Form - import lila.app.UiEnv.{ *, given } -import lila.report.ui.ReportUi.* -import lila.report.Room -import lila.report.Report.WithSuspect -import lila.rating.UserPerfsExt.bestPerfs import lila.mod.ui.PendingCounts +import lila.rating.UserPerfsExt.bestPerfs +import lila.report.Report.WithSuspect +import lila.report.Room +import lila.report.ui.ReportUi.* val ui = lila.report.ui.ReportUi(helpers) diff --git a/app/views/round/player.scala b/app/views/round/player.scala index ce53d17c2913..4453d576012b 100644 --- a/app/views/round/player.scala +++ b/app/views/round/player.scala @@ -2,9 +2,8 @@ package views.round import play.api.libs.json.Json -import lila.common.Json.given import lila.app.UiEnv.{ *, given } - +import lila.common.Json.given import lila.round.RoundGame.secondsSinceCreation def player( diff --git a/app/views/round/watcher.scala b/app/views/round/watcher.scala index fd9faa8d48ec..34b03d960ff5 100644 --- a/app/views/round/watcher.scala +++ b/app/views/round/watcher.scala @@ -3,7 +3,6 @@ package views.round import play.api.libs.json.{ JsObject, Json } import lila.app.UiEnv.{ *, given } - import lila.round.RoundGame.secondsSinceCreation def watcher( diff --git a/app/views/streamer.scala b/app/views/streamer.scala index 23702e765d4a..6a33b11798b0 100644 --- a/app/views/streamer.scala +++ b/app/views/streamer.scala @@ -3,9 +3,9 @@ package views.streamer import scalalib.paginator.Paginator import lila.app.UiEnv.{ *, given } -import lila.streamer.Streamer import lila.core.perf.{ UserPerfs, UserWithPerfs } import lila.rating.UserPerfsExt.best6Perfs +import lila.streamer.Streamer lazy val bits = lila.streamer.ui.StreamerBits(helpers)(picfitUrl) private lazy val ui = lila.streamer.ui.StreamerUi(helpers, bits) diff --git a/app/views/study.scala b/app/views/study.scala index f606790ad3d4..bbde9e75f50e 100644 --- a/app/views/study.scala +++ b/app/views/study.scala @@ -1,15 +1,15 @@ package views.study -import play.api.libs.json.Json import chess.format.pgn.PgnStr +import play.api.libs.json.Json import lila.app.UiEnv.{ *, given } -import lila.core.study.{ IdName, Order } -import lila.core.socket.SocketVersion import lila.common.Json.given +import lila.core.socket.SocketVersion +import lila.core.study.{ IdName, Order } lazy val bits = lila.study.ui.StudyBits(helpers) -lazy val ui = lila.study.ui.StudyUi(helpers, bits) +lazy val ui = lila.study.ui.StudyUi(helpers) lazy val list = lila.study.ui.ListUi(helpers, bits) def staffPicks(p: lila.cms.CmsPage.Render)(using Context) = @@ -118,7 +118,6 @@ def privateStudy(study: lila.study.Study)(using Context) = object embed: def apply(s: lila.study.Study, chapter: lila.study.Chapter, pgn: PgnStr)(using ctx: EmbedContext) = - import views.analyse.embed.* val canGetPgn = s.settings.shareable == lila.study.Settings.UserSelection.Everyone views.base.embed( title = s"${s.name} ${chapter.name}", diff --git a/app/views/swiss.scala b/app/views/swiss.scala index 0db9433c9880..c6d04ef161d7 100644 --- a/app/views/swiss.scala +++ b/app/views/swiss.scala @@ -2,7 +2,7 @@ package views.swiss import play.api.libs.json.JsObject -import lila.app.UiEnv.{ given, * } +import lila.app.UiEnv.{ *, given } lazy val ui = lila.swiss.ui.SwissBitsUi(helpers, env.swiss.getName) lazy val home = lila.swiss.ui.SwissHomeUi(helpers) diff --git a/app/views/team/show.scala b/app/views/team/show.scala index ecb1a4f0545a..424b342ed8b6 100644 --- a/app/views/team/show.scala +++ b/app/views/team/show.scala @@ -1,14 +1,13 @@ package views.team import play.api.libs.json.Json +import scalalib.paginator.Paginator -import lila.app.mashup.TeamInfo import lila.app.UiEnv.{ *, given } - +import lila.app.mashup.TeamInfo import lila.common.Json.given -import scalalib.paginator.Paginator -import lila.mod.Modlog import lila.core.socket.SocketVersion +import lila.mod.Modlog import lila.team.Team object show: diff --git a/app/views/team/tournaments.scala b/app/views/team/tournaments.scala index 4a6cdd784606..784560c6ef13 100644 --- a/app/views/team/tournaments.scala +++ b/app/views/team/tournaments.scala @@ -1,7 +1,7 @@ package views.team -import lila.app.mashup.TeamInfo import lila.app.UiEnv.{ *, given } +import lila.app.mashup.TeamInfo // both arena and swiss object tournaments: diff --git a/app/views/title.scala b/app/views/title.scala index 49a611075dbc..10a2964bee80 100644 --- a/app/views/title.scala +++ b/app/views/title.scala @@ -1,6 +1,6 @@ package views.title -import lila.app.UiEnv.{ given, * } +import lila.app.UiEnv.{ *, given } import lila.mod.IpRender.RenderIp import lila.title.TitleRequest diff --git a/app/views/ublog.scala b/app/views/ublog.scala index 41a03b88a8ec..c78560a2f977 100644 --- a/app/views/ublog.scala +++ b/app/views/ublog.scala @@ -2,9 +2,9 @@ package views.ublog import scalalib.paginator.Paginator -import lila.app.UiEnv. * -import lila.i18n.LangList +import lila.app.UiEnv.* import lila.core.i18n.Language +import lila.i18n.LangList import lila.ublog.UblogPost lazy val ui = lila.ublog.ui.UblogUi(helpers, views.atomUi)(picfitUrl) diff --git a/app/views/user/list.scala b/app/views/user/list.scala index 8aded65183ab..5222d2da2c33 100644 --- a/app/views/user/list.scala +++ b/app/views/user/list.scala @@ -1,9 +1,9 @@ package views.user import lila.app.UiEnv.{ *, given } +import lila.core.perf.UserWithPerfs import lila.rating.UserPerfsExt.bestAny3Perfs import lila.user.LightCount -import lila.core.perf.UserWithPerfs object list: diff --git a/app/views/user/mod.scala b/app/views/user/mod.scala index 43b3f3037777..ef32ca204147 100644 --- a/app/views/user/mod.scala +++ b/app/views/user/mod.scala @@ -1,13 +1,12 @@ package views.user import lila.app.UiEnv.{ *, given } - import lila.appeal.Appeal +import lila.core.i18n.Translate import lila.mod.IpRender.RenderIp -import lila.mod. UserWithModlog +import lila.mod.UserWithModlog import lila.mod.ui.ModUserTableUi import lila.security.{ Dated, UserAgentParser, UserClient, UserLogins } -import lila.core.i18n.Translate object mod: diff --git a/app/views/user/show/gamesContent.scala b/app/views/user/show/gamesContent.scala index e1cc9d79ff0d..024e41bd89c0 100644 --- a/app/views/user/show/gamesContent.scala +++ b/app/views/user/show/gamesContent.scala @@ -1,9 +1,9 @@ package views.user.show -import lila.app.UiEnv.{ *, given } - import scalalib.paginator.Paginator +import lila.app.UiEnv.{ *, given } + object gamesContent: def apply( diff --git a/app/views/user/show/header.scala b/app/views/user/show/header.scala index f8ae01769585..ca29a7488692 100644 --- a/app/views/user/show/header.scala +++ b/app/views/user/show/header.scala @@ -1,12 +1,11 @@ package views.user package show -import lila.app.mashup.UserInfo import lila.app.UiEnv.{ *, given } - +import lila.app.mashup.UserInfo import lila.user.Plan.sinceDate -import lila.user.Profile.* import lila.user.PlayTime.* +import lila.user.Profile.* object header: diff --git a/app/views/user/show/page.scala b/app/views/user/show/page.scala index 7c0c4a99872d..6f34cd0997d2 100644 --- a/app/views/user/show/page.scala +++ b/app/views/user/show/page.scala @@ -3,12 +3,10 @@ package show import play.api.data.Form -import lila.app.mashup.UserInfo import lila.app.UiEnv.{ *, given } - -import lila.game.GameFilter - +import lila.app.mashup.UserInfo import lila.core.data.SafeJsonStr +import lila.game.GameFilter import lila.rating.UserWithPerfs.titleUsernameWithBestRating lazy val ui = lila.user.ui.UserShow(helpers, bits) diff --git a/app/views/user/ui.scala b/app/views/user/ui.scala index 3c4198409e18..34a5c73a4b9d 100644 --- a/app/views/user/ui.scala +++ b/app/views/user/ui.scala @@ -1,11 +1,11 @@ package views.user import lila.app.UiEnv.{ *, given } -import lila.rating.UserPerfsExt.best8Perfs -import lila.core.perf.UserWithPerfs -import lila.user.Profile.flagInfo import lila.core.data.SafeJsonStr +import lila.core.perf.UserWithPerfs import lila.perfStat.PerfStatData +import lila.rating.UserPerfsExt.best8Perfs +import lila.user.Profile.flagInfo val bits = lila.user.ui.UserBits(helpers) val noteUi = lila.user.ui.NoteUi(helpers) diff --git a/modules/activity/src/main/ActivityReadApi.scala b/modules/activity/src/main/ActivityReadApi.scala index 44a74c84f92e..aa93899d3b1a 100644 --- a/modules/activity/src/main/ActivityReadApi.scala +++ b/modules/activity/src/main/ActivityReadApi.scala @@ -1,14 +1,13 @@ package lila.activity import play.api.i18n.Lang - import scalalib.HeapSort -import lila.db.AsyncCollFailingSilently -import lila.db.dsl.* -import lila.core.game.LightPov -import lila.core.swiss.{ IdName as SwissIdName } import lila.core.chess.Rank +import lila.core.game.LightPov +import lila.core.swiss.IdName as SwissIdName +import lila.db.AsyncCollFailingSilently +import lila.db.dsl.* final class ActivityReadApi( coll: AsyncCollFailingSilently, diff --git a/modules/activity/src/main/ActivityUi.scala b/modules/activity/src/main/ActivityUi.scala index 66947991d40d..482af5fc8a13 100644 --- a/modules/activity/src/main/ActivityUi.scala +++ b/modules/activity/src/main/ActivityUi.scala @@ -2,15 +2,14 @@ package lila.activity package ui import lila.activity.activities.* -import lila.core.forum.ForumTopicMini -import lila.core.forum.ForumPostMini -import lila.core.rating.Score -import lila.core.rating.RatingProg import lila.core.chess.Rank +import lila.core.forum.{ ForumPostMini, ForumTopicMini } +import lila.core.i18n.Translate import lila.core.perf.UserWithPerfs +import lila.core.rating.{ RatingProg, Score } import lila.rating.UserPerfsExt.dubiousPuzzle -import lila.core.i18n.Translate import lila.ui.* + import ScalatagsTemplate.{ *, given } final class ActivityUi(helpers: Helpers)( diff --git a/modules/activity/src/main/ActivityView.scala b/modules/activity/src/main/ActivityView.scala index 20535f91258c..c9ad10c6b4a0 100644 --- a/modules/activity/src/main/ActivityView.scala +++ b/modules/activity/src/main/ActivityView.scala @@ -1,14 +1,13 @@ package lila.activity +import lila.activity.activities.* +import lila.core.chess.Rank +import lila.core.forum.{ ForumPostMini, ForumTopicMini } import lila.core.game.LightPov +import lila.core.rating.Score import lila.core.simul.Simul -import lila.core.swiss.{ IdName as SwissIdName } +import lila.core.swiss.IdName as SwissIdName import lila.core.ublog.UblogPost -import lila.activity.activities.* -import lila.core.forum.ForumPostMini -import lila.core.forum.ForumTopicMini -import lila.core.rating.Score -import lila.core.chess.Rank case class ActivityView( interval: TimeInterval, diff --git a/modules/activity/src/main/ActivityWriteApi.scala b/modules/activity/src/main/ActivityWriteApi.scala index 83f38553ab1b..733020fce373 100644 --- a/modules/activity/src/main/ActivityWriteApi.scala +++ b/modules/activity/src/main/ActivityWriteApi.scala @@ -2,9 +2,9 @@ package lila.activity import reactivemongo.api.bson.* +import lila.core.simul.Simul import lila.db.AsyncCollFailingSilently import lila.db.dsl.{ *, given } -import lila.core.simul.Simul final class ActivityWriteApi( withColl: AsyncCollFailingSilently, diff --git a/modules/activity/src/main/BSONHandlers.scala b/modules/activity/src/main/BSONHandlers.scala index 6f9afb351b33..1ff4c3bc52ab 100644 --- a/modules/activity/src/main/BSONHandlers.scala +++ b/modules/activity/src/main/BSONHandlers.scala @@ -4,13 +4,10 @@ import reactivemongo.api.bson.* import scala.util.Success -import lila.common.{ Iso, LichessDay } -import lila.db.dsl.{ *, given } - -import lila.rating.PerfType -import lila.core.rating.RatingProg -import lila.core.rating.Score +import lila.common.LichessDay import lila.core.chess.Rank +import lila.core.rating.{ RatingProg, Score } +import lila.db.dsl.{ *, given } private object BSONHandlers: diff --git a/modules/activity/src/main/Env.scala b/modules/activity/src/main/Env.scala index 1275385af776..093c90363445 100644 --- a/modules/activity/src/main/Env.scala +++ b/modules/activity/src/main/Env.scala @@ -3,12 +3,12 @@ package lila.activity import com.softwaremill.macwire.* import com.softwaremill.tagging.* -import lila.core.config.* -import lila.core.round.CorresMoveEvent -import lila.core.misc.streamer.StreamStart -import lila.core.misc.puzzle.{ RacerRun, StormRun, StreakRun } import lila.common.Bus +import lila.core.config.* import lila.core.forum.BusForum +import lila.core.misc.puzzle.{ RacerRun, StormRun, StreakRun } +import lila.core.misc.streamer.StreamStart +import lila.core.round.CorresMoveEvent @Module final class Env( diff --git a/modules/activity/src/main/JsonView.scala b/modules/activity/src/main/JsonView.scala index 74b1d12b4728..236a9e65ca7a 100644 --- a/modules/activity/src/main/JsonView.scala +++ b/modules/activity/src/main/JsonView.scala @@ -3,15 +3,13 @@ package lila.activity import play.api.i18n.Lang import play.api.libs.json.* +import lila.activity.activities.* import lila.common.Json.{ *, given } import lila.core.game.LightPov -import lila.rating.PerfType +import lila.core.rating.{ RatingProg, Score } import lila.core.simul.Simul - -import lila.activity.activities.* import lila.core.tournament.leaderboard.Ratio -import lila.core.rating.RatingProg -import lila.core.rating.Score +import lila.rating.PerfType final class JsonView( getTourName: lila.core.tournament.GetTourName, diff --git a/modules/activity/src/main/activities.scala b/modules/activity/src/main/activities.scala index 19856416d59a..c6a172bd0bbd 100644 --- a/modules/activity/src/main/activities.scala +++ b/modules/activity/src/main/activities.scala @@ -2,9 +2,9 @@ package lila.activity import alleycats.Zero -import lila.core.rating.Score import lila.activity.Score.plus import lila.core.chess.Rank +import lila.core.rating.Score object activities: diff --git a/modules/analyse/src/main/AccuracyCP.scala b/modules/analyse/src/main/AccuracyCP.scala index 60fa0ea6b315..6ee8e6a05c7e 100644 --- a/modules/analyse/src/main/AccuracyCP.scala +++ b/modules/analyse/src/main/AccuracyCP.scala @@ -1,7 +1,6 @@ package lila.analyse -import lila.core.game.SideAndStart -import lila.core.game.Pov +import lila.core.game.{ Pov, SideAndStart } import lila.tree.Eval.* import lila.tree.{ Analysis, Info } diff --git a/modules/analyse/src/main/AccuracyPercent.scala b/modules/analyse/src/main/AccuracyPercent.scala index 49979a15bcd1..b854c48f8ab6 100644 --- a/modules/analyse/src/main/AccuracyPercent.scala +++ b/modules/analyse/src/main/AccuracyPercent.scala @@ -1,12 +1,11 @@ package lila.analyse import chess.{ ByColor, Color } - import scalalib.Maths -import lila.tree.Eval -import lila.tree.{ Analysis, WinPercent } + import lila.core.data.Percent import lila.core.game.SideAndStart +import lila.tree.{ Analysis, Eval, WinPercent } // Quality of a move, based on previous and next WinPercent opaque type AccuracyPercent = Double diff --git a/modules/analyse/src/main/Analyser.scala b/modules/analyse/src/main/Analyser.scala index c3a35ac37eea..9075fc21c474 100644 --- a/modules/analyse/src/main/Analyser.scala +++ b/modules/analyse/src/main/Analyser.scala @@ -1,7 +1,7 @@ package lila.analyse -import play.api.libs.json.* import monocle.syntax.all.* +import play.api.libs.json.* import lila.common.Bus import lila.core.game.InsertGame diff --git a/modules/analyse/src/main/Annotator.scala b/modules/analyse/src/main/Annotator.scala index 4964172453b3..67ac2b58e85a 100644 --- a/modules/analyse/src/main/Annotator.scala +++ b/modules/analyse/src/main/Annotator.scala @@ -4,8 +4,8 @@ import chess.format.pgn.{ Comment, Glyphs, Move, Pgn, PgnStr, Tag } import chess.opening.* import chess.{ Color, Ply, Status, Tree, Variation } -import lila.tree.{ Advice, Analysis, StatusText } import lila.core.game.{ Game, GameDrawOffers } +import lila.tree.{ Advice, Analysis, StatusText } final class Annotator(netDomain: lila.core.config.NetDomain) extends lila.tree.Annotator: diff --git a/modules/analyse/src/main/Env.scala b/modules/analyse/src/main/Env.scala index c8eaaf0c7907..68183d270e3c 100644 --- a/modules/analyse/src/main/Env.scala +++ b/modules/analyse/src/main/Env.scala @@ -2,8 +2,7 @@ package lila.analyse import com.softwaremill.macwire.* -import lila.core.config.NetConfig -import lila.core.config.CollName +import lila.core.config.{ CollName, NetConfig } @Module final class Env( diff --git a/modules/analyse/src/main/ExternalEngine.scala b/modules/analyse/src/main/ExternalEngine.scala index 9586a67b4763..6234de312069 100644 --- a/modules/analyse/src/main/ExternalEngine.scala +++ b/modules/analyse/src/main/ExternalEngine.scala @@ -2,10 +2,10 @@ package lila.analyse import chess.variant.Variant import com.roundeights.hasher.Algo -import scalalib.{ SecureRandom, ThreadLocalRandom } import play.api.data.* import play.api.data.Forms.* -import play.api.libs.json.{ Json, OWrites, JsObject } +import play.api.libs.json.{ JsObject, Json, OWrites } +import scalalib.{ SecureRandom, ThreadLocalRandom } import lila.common.Form.{ *, given } import lila.common.Json.given diff --git a/modules/analyse/src/main/JsonView.scala b/modules/analyse/src/main/JsonView.scala index 9e71b6f753fa..8a1a26d1fce1 100644 --- a/modules/analyse/src/main/JsonView.scala +++ b/modules/analyse/src/main/JsonView.scala @@ -4,9 +4,8 @@ import chess.{ ByColor, Color, Ply } import play.api.libs.json.* import lila.common.Json.given -import lila.tree.Eval.jsonWrites -import lila.tree.Analysis import lila.core.game.SideAndStart +import lila.tree.Analysis object JsonView extends lila.tree.AnalysisJson: diff --git a/modules/analyse/src/main/ui/AnalyseI18n.scala b/modules/analyse/src/main/ui/AnalyseI18n.scala index 3a7c9b891e51..96d6e481cff1 100644 --- a/modules/analyse/src/main/ui/AnalyseI18n.scala +++ b/modules/analyse/src/main/ui/AnalyseI18n.scala @@ -1,12 +1,11 @@ package lila.analyse package ui -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.i18n.{ I18nKey, Translate } +import lila.ui.* final class AnalyseI18n(helpers: Helpers): - import helpers.{ *, given } + import helpers.* def apply( withCeval: Boolean = true, @@ -225,11 +224,11 @@ final class AnalyseI18n(helpers: Helpers): ) final class GameAnalyseI18n(helpers: Helpers, board: AnalyseI18n): - import helpers.{ *, given } + import helpers.* def apply()(using Translate) = i18nJsObject(i18nKeys) - import lila.core.i18n.I18nKey.{ site, puzzle, study, preferences } + import lila.core.i18n.I18nKey.{ site, puzzle } private val i18nKeys: Vector[I18nKey] = { board.cevalWidget ++ diff --git a/modules/analyse/src/main/ui/AnalyseUi.scala b/modules/analyse/src/main/ui/AnalyseUi.scala index e2e79e3c692f..e71f98480e47 100644 --- a/modules/analyse/src/main/ui/AnalyseUi.scala +++ b/modules/analyse/src/main/ui/AnalyseUi.scala @@ -1,10 +1,11 @@ package lila.analyse package ui -import play.api.libs.json.* import chess.variant.* +import play.api.libs.json.* import lila.ui.* + import ScalatagsTemplate.{ *, given } final class AnalyseUi(helpers: Helpers)(externalEngineEndpoint: String): diff --git a/modules/analyse/src/test/AccuracyPercentTest.scala b/modules/analyse/src/test/AccuracyPercentTest.scala index e614112a882e..3e7aef51ed3b 100644 --- a/modules/analyse/src/test/AccuracyPercentTest.scala +++ b/modules/analyse/src/test/AccuracyPercentTest.scala @@ -1,8 +1,8 @@ package lila.analyse import chess.{ ByColor, Color } - import scalalib.Maths.isCloseTo + import lila.tree.Eval.Cp class AccuracyPercentTest extends munit.FunSuite: diff --git a/modules/analyse/src/test/AnnotatorTest.scala b/modules/analyse/src/test/AnnotatorTest.scala index b0ed8edf8a23..02498c338aba 100644 --- a/modules/analyse/src/test/AnnotatorTest.scala +++ b/modules/analyse/src/test/AnnotatorTest.scala @@ -1,13 +1,12 @@ package lila.analyse import chess.format.pgn.{ InitialComments, Move, Parser, Pgn, PgnStr, SanStr, Tag, Tags } -import chess.{ ByColor, Ply, Node } +import chess.{ ByColor, Node, Ply } -import lila.core.config.{ BaseUrl, NetDomain } -import lila.core.game.PgnDump -import lila.tree.Eval -import lila.core.user.LightUserApiMinimal import lila.core.LightUser +import lila.core.config.NetDomain import lila.core.id.GamePlayerId +import lila.core.user.LightUserApiMinimal +import lila.tree.Eval class AnnotatorTest extends munit.FunSuite: @@ -50,7 +49,7 @@ class AnnotatorTest extends munit.FunSuite: def literal(key: I18nKey, args: Seq[Any], lang: Lang): String = key.value def plural(key: I18nKey, count: Count, args: Seq[Any], lang: Lang): String = key.value val frag = new TranslatorFrag: - import scalatags.Text.{ Frag, RawFrag } + import scalatags.Text.RawFrag def literal(key: I18nKey, args: Seq[Matchable], lang: Lang): RawFrag = RawFrag(key.value) def plural(key: I18nKey, count: Count, args: Seq[Matchable], lang: Lang): RawFrag = RawFrag(key.value) diff --git a/modules/api/src/main/Cli.scala b/modules/api/src/main/Cli.scala index ba31e32da96f..2d2020682a12 100644 --- a/modules/api/src/main/Cli.scala +++ b/modules/api/src/main/Cli.scala @@ -1,7 +1,6 @@ package lila.api import lila.common.Bus -import lila.web.AnnounceApi final private[api] class Cli( security: lila.security.Env, diff --git a/modules/api/src/main/Context.scala b/modules/api/src/main/Context.scala index e0115d672d36..56f64371a0c9 100644 --- a/modules/api/src/main/Context.scala +++ b/modules/api/src/main/Context.scala @@ -4,14 +4,13 @@ import play.api.i18n.Lang import play.api.mvc.{ Request, RequestHeader } import lila.common.HTTPRequest -import lila.core.i18n.{ Language, Translate, defaultLanguage } +import lila.core.i18n.Translate +import lila.core.net.IpAddress +import lila.core.notify.UnreadCount +import lila.core.user.KidMode import lila.oauth.{ OAuthScope, TokenScopes } import lila.pref.Pref -import lila.core.user.KidMode -import lila.user.UserExt.userLanguage import lila.ui.Nonce -import lila.core.net.IpAddress -import lila.core.notify.UnreadCount /* Who is logged in, and how */ final class LoginContext( diff --git a/modules/api/src/main/Env.scala b/modules/api/src/main/Env.scala index 5c0e09c731ce..3215b6c7e8c0 100644 --- a/modules/api/src/main/Env.scala +++ b/modules/api/src/main/Env.scala @@ -2,14 +2,11 @@ package lila.api import akka.actor.* import com.softwaremill.macwire.* -import play.api.libs.ws.StandaloneWSClient import play.api.{ Configuration, Mode } import lila.chat.{ GetLinkCheck, IsChatFresh } import lila.common.Bus -import lila.common.config.* import lila.core.misc.lpv.* -import lila.core.id.CmsPageKey @Module final class Env( diff --git a/modules/api/src/main/EventStream.scala b/modules/api/src/main/EventStream.scala index 9e7e59dbd82b..4fa317289eb9 100644 --- a/modules/api/src/main/EventStream.scala +++ b/modules/api/src/main/EventStream.scala @@ -2,15 +2,15 @@ package lila.api import akka.actor.* import akka.stream.scaladsl.* +import play.api.i18n.Lang import play.api.libs.json.* import lila.challenge.Challenge import lila.common.Bus import lila.common.Json.given import lila.core.game.{ FinishGame, StartGame } -import lila.game.{ Rematches } -import lila.user.{ LightUserApi, Me, User, UserRepo } -import play.api.i18n.Lang +import lila.game.Rematches +import lila.user.{ LightUserApi, Me, UserRepo } final class EventStream( challengeJsonView: lila.challenge.JsonView, diff --git a/modules/api/src/main/GameApi.scala b/modules/api/src/main/GameApi.scala index 9180ce3f4526..c6a8edae08ea 100644 --- a/modules/api/src/main/GameApi.scala +++ b/modules/api/src/main/GameApi.scala @@ -4,19 +4,16 @@ import chess.format.Fen import play.api.libs.json.* import reactivemongo.api.bson.* import scalalib.Json.given +import scalalib.paginator.Paginator import lila.analyse.{ Analysis, JsonView as analysisJson } import lila.common.Json.given -import lila.common.config.* import lila.core.config.* -import scalalib.paginator.Paginator import lila.db.dsl.{ *, given } import lila.db.paginator.Adapter import lila.game.BSONHandlers.given import lila.game.Game.BSONFields as G -import lila.game.JsonView.given import lila.game.{ CrosstableApi, Game } -import lila.game.GameExt.computeMoveTimes final private[api] class GameApi( net: NetConfig, diff --git a/modules/api/src/main/GameApiV2.scala b/modules/api/src/main/GameApiV2.scala index bea185cba0fd..2fa7e1245acd 100644 --- a/modules/api/src/main/GameApiV2.scala +++ b/modules/api/src/main/GameApiV2.scala @@ -7,22 +7,19 @@ import chess.format.pgn.{ PgnStr, Tag } import play.api.libs.json.* import lila.analyse.{ AccuracyPercent, Analysis, JsonView as analysisJson } -import lila.common.Json.given - import lila.common.HTTPRequest +import lila.common.Json.given import lila.core.LightUser +import lila.core.i18n.Translate import lila.db.dsl.{ *, given } import lila.game.JsonView.given -import lila.game.PgnDump.WithFlags +import lila.game.PgnDump.{ WithFlags, applyDelay } import lila.game.{ Divider, Query } import lila.round.GameProxyRepo import lila.team.GameTeams import lila.tournament.Tournament import lila.web.{ RealPlayerApi, RealPlayers } -import lila.core.i18n.Translate -import lila.game.PgnDump.applyDelay - final class GameApiV2( pgnDump: PgnDump, gameRepo: lila.game.GameRepo, diff --git a/modules/api/src/main/LobbyApi.scala b/modules/api/src/main/LobbyApi.scala index c2cb58978da4..20d8ee8d7e2c 100644 --- a/modules/api/src/main/LobbyApi.scala +++ b/modules/api/src/main/LobbyApi.scala @@ -3,9 +3,8 @@ package lila.api import play.api.libs.json.{ JsObject, Json, Writes } import lila.common.Json.given - -import lila.lobby.{ LobbySocket, SeekApi } import lila.core.perf.{ UserPerfs, UserWithPerfs } +import lila.lobby.{ LobbySocket, SeekApi } import lila.rating.UserPerfsExt.perfsList final class LobbyApi( diff --git a/modules/api/src/main/PgnDump.scala b/modules/api/src/main/PgnDump.scala index 0dd9188b0a85..01d9a0ffc3d9 100644 --- a/modules/api/src/main/PgnDump.scala +++ b/modules/api/src/main/PgnDump.scala @@ -1,14 +1,14 @@ package lila.api import chess.ByColor -import chess.format.pgn.Pgn import chess.format.Fen +import chess.format.pgn.Pgn import play.api.i18n.Lang import lila.analyse.{ Analysis, Annotator } +import lila.core.i18n.Translate import lila.game.PgnDump.WithFlags import lila.team.GameTeams -import lila.core.i18n.Translate import lila.web.RealPlayers final class PgnDump( diff --git a/modules/api/src/main/RoundApi.scala b/modules/api/src/main/RoundApi.scala index a358b322f1eb..44a95dfe28db 100644 --- a/modules/api/src/main/RoundApi.scala +++ b/modules/api/src/main/RoundApi.scala @@ -5,22 +5,20 @@ import play.api.libs.json.* import lila.analyse.{ Analysis, JsonView as analysisJson } import lila.api.Context.given -import lila.common.Json.given import lila.common.HTTPRequest - +import lila.common.Json.given +import lila.core.data.Preload +import lila.core.i18n.Translate +import lila.core.perm.Granter +import lila.core.user.GameUsers import lila.pref.Pref import lila.puzzle.PuzzleOpening -import lila.tree.{ ExportOptions, Tree } +import lila.round.RoundGame.* import lila.round.{ Forecast, JsonView } -import lila.core.perm.Granter import lila.simul.Simul import lila.swiss.GameView as SwissView import lila.tournament.GameView as TourView -import lila.tree.Node.partitionTreeJsonWriter -import lila.core.user.GameUsers -import lila.core.i18n.Translate -import lila.core.data.Preload -import lila.round.RoundGame.* +import lila.tree.{ ExportOptions, Tree } final private[api] class RoundApi( jsonView: JsonView, diff --git a/modules/api/src/main/TextLpvExpand.scala b/modules/api/src/main/TextLpvExpand.scala index 1bead818501e..48ff81b7d1df 100644 --- a/modules/api/src/main/TextLpvExpand.scala +++ b/modules/api/src/main/TextLpvExpand.scala @@ -5,9 +5,9 @@ import scalatags.Text.all.* import lila.analyse.{ Analysis, AnalysisRepo } import lila.core.config.NetDomain -import lila.memo.CacheApi import lila.core.i18n.{ Translate, Translator } import lila.core.misc.lpv.* +import lila.memo.CacheApi final class TextLpvExpand( gameRepo: lila.core.game.GameRepo, diff --git a/modules/api/src/main/UserApi.scala b/modules/api/src/main/UserApi.scala index 0b1099aac33e..880d65c5cc54 100644 --- a/modules/api/src/main/UserApi.scala +++ b/modules/api/src/main/UserApi.scala @@ -4,13 +4,12 @@ import play.api.i18n.Lang import play.api.libs.json.* import lila.common.Json.given +import lila.core.LightUser import lila.core.config.* -import lila.rating.UserRankMap +import lila.core.perf.UserWithPerfs import lila.core.perm.Granter +import lila.rating.{ PerfType, UserRankMap } import lila.user.Trophy -import lila.rating.PerfType -import lila.core.perf.UserWithPerfs -import lila.core.LightUser final class UserApi( jsonView: lila.user.JsonView, diff --git a/modules/appeal/src/main/Appeal.scala b/modules/appeal/src/main/Appeal.scala index d002b8a5c96f..a97a7c5122f3 100644 --- a/modules/appeal/src/main/Appeal.scala +++ b/modules/appeal/src/main/Appeal.scala @@ -2,9 +2,9 @@ package lila.appeal import reactivemongo.api.bson.Macros.Annotations.Key -import lila.ui.Icon -import lila.core.user.UserMark import lila.core.id.AppealId +import lila.core.user.UserMark +import lila.ui.Icon case class Appeal( @Key("_id") id: AppealId, diff --git a/modules/appeal/src/main/AppealApi.scala b/modules/appeal/src/main/AppealApi.scala index 12f3025a144a..f1c5d287808a 100644 --- a/modules/appeal/src/main/AppealApi.scala +++ b/modules/appeal/src/main/AppealApi.scala @@ -1,9 +1,9 @@ package lila.appeal -import lila.db.dsl.{ *, given } -import lila.core.user.{ UserMark, NoteApi, UserRepo } import lila.appeal.Appeal.Filter import lila.core.id.AppealId +import lila.core.user.{ NoteApi, UserMark, UserRepo } +import lila.db.dsl.{ *, given } final class AppealApi( coll: Coll, diff --git a/modules/appeal/src/main/ui/AppealTreeUi.scala b/modules/appeal/src/main/ui/AppealTreeUi.scala index c0c0f6adc66f..dc6d2429baac 100644 --- a/modules/appeal/src/main/ui/AppealTreeUi.scala +++ b/modules/appeal/src/main/ui/AppealTreeUi.scala @@ -1,9 +1,10 @@ package lila.appeal package ui +import lila.core.id.CmsPageKey import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.id.CmsPageKey final class AppealTreeUi(helpers: Helpers, ui: AppealUi)( newAppeal: String => Context ?=> Frag diff --git a/modules/appeal/src/main/ui/AppealUi.scala b/modules/appeal/src/main/ui/AppealUi.scala index 1e2bb1a52f54..d9732c29e44c 100644 --- a/modules/appeal/src/main/ui/AppealUi.scala +++ b/modules/appeal/src/main/ui/AppealUi.scala @@ -2,6 +2,7 @@ package lila.appeal package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } final class AppealUi(helpers: Helpers): diff --git a/modules/bookmark/src/main/BookmarkApi.scala b/modules/bookmark/src/main/BookmarkApi.scala index f6d312fbe54e..ab86395766f1 100644 --- a/modules/bookmark/src/main/BookmarkApi.scala +++ b/modules/bookmark/src/main/BookmarkApi.scala @@ -2,8 +2,8 @@ package lila.bookmark import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } import lila.core.game.{ Game, GameApi } +import lila.db.dsl.{ *, given } case class Bookmark(game: Game, user: User) diff --git a/modules/bookmark/src/main/PaginatorBuilder.scala b/modules/bookmark/src/main/PaginatorBuilder.scala index 350bfcd7e2d4..641592d69f2a 100644 --- a/modules/bookmark/src/main/PaginatorBuilder.scala +++ b/modules/bookmark/src/main/PaginatorBuilder.scala @@ -1,8 +1,9 @@ package lila.bookmark import scalalib.paginator.* -import lila.db.dsl.{ *, given } + import lila.core.game.{ Game, GameRepo } +import lila.db.dsl.{ *, given } final class PaginatorBuilder( coll: Coll, diff --git a/modules/bot/src/main/BotJsonView.scala b/modules/bot/src/main/BotJsonView.scala index a03d5f9bed1e..97e1bf05496f 100644 --- a/modules/bot/src/main/BotJsonView.scala +++ b/modules/bot/src/main/BotJsonView.scala @@ -3,10 +3,10 @@ package lila.bot import play.api.libs.json.* import lila.common.Json.given -import lila.game.JsonView.given import lila.core.game.{ Game, GameRepo, Pov, WithInitialFen } import lila.core.i18n.Translate import lila.game.GameExt.perfType +import lila.game.JsonView.given final class BotJsonView( lightUserApi: lila.core.user.LightUserApi, diff --git a/modules/bot/src/main/BotPlayer.scala b/modules/bot/src/main/BotPlayer.scala index 08220fe452d3..e3fc486d9973 100644 --- a/modules/bot/src/main/BotPlayer.scala +++ b/modules/bot/src/main/BotPlayer.scala @@ -3,12 +3,11 @@ package lila.bot import chess.format.Uci import lila.common.Bus -import lila.game.{ GameRepo, Rematches } import lila.core.misc.map.Tell import lila.core.round.* - import lila.core.shutup.PublicSource import lila.game.GameExt.playerCanOfferDraw +import lila.game.{ GameRepo, Rematches } final class BotPlayer( chatApi: lila.chat.ChatApi, diff --git a/modules/bot/src/main/GameStateStream.scala b/modules/bot/src/main/GameStateStream.scala index a68a6be143e2..0065c8082b1c 100644 --- a/modules/bot/src/main/GameStateStream.scala +++ b/modules/bot/src/main/GameStateStream.scala @@ -2,19 +2,17 @@ package lila.bot import akka.actor.* import akka.stream.scaladsl.* -import scalalib.ThreadLocalRandom import play.api.i18n.Lang import play.api.libs.json.* import play.api.mvc.RequestHeader +import scalalib.ThreadLocalRandom import lila.chat.{ Chat, UserLine } import lila.common.{ Bus, HTTPRequest } -import lila.game.actorApi.{ BoardDrawOffer, BoardGone, BoardTakeback, BoardTakebackOffer, MoveGameEvent } - +import lila.core.game.{ AbortedBy, FinishGame, WithInitialFen } import lila.core.misc.map.Tell -import lila.core.round.BotConnected -import lila.core.round.QuietFlag -import lila.core.game.{ WithInitialFen, FinishGame, AbortedBy } +import lila.core.round.{ BotConnected, QuietFlag } +import lila.game.actorApi.{ BoardDrawOffer, BoardGone, BoardTakeback, BoardTakebackOffer, MoveGameEvent } final class GameStateStream( onlineApiUsers: OnlineApiUsers, diff --git a/modules/bot/src/main/OnlineApiUsers.scala b/modules/bot/src/main/OnlineApiUsers.scala index efc973dcb020..745b6b103c63 100644 --- a/modules/bot/src/main/OnlineApiUsers.scala +++ b/modules/bot/src/main/OnlineApiUsers.scala @@ -1,9 +1,8 @@ package lila.bot import lila.common.Bus -import lila.core.socket.ApiUserIsOnline +import lila.core.socket.{ ApiUserIsOnline, IsOnline } import lila.memo.ExpireCallbackMemo -import lila.core.socket.IsOnline final class OnlineApiUsers( isOnline: IsOnline, diff --git a/modules/challenge/src/main/BSONHandlers.scala b/modules/challenge/src/main/BSONHandlers.scala index 6a01127ee7c7..18f2091e3a9d 100644 --- a/modules/challenge/src/main/BSONHandlers.scala +++ b/modules/challenge/src/main/BSONHandlers.scala @@ -2,8 +2,8 @@ package lila.challenge import chess.variant.Variant import reactivemongo.api.bson.* - import scalalib.model.Days + import lila.db.BSON import lila.db.BSON.{ Reader, Writer } import lila.db.dsl.{ *, given } diff --git a/modules/challenge/src/main/Challenge.scala b/modules/challenge/src/main/Challenge.scala index 287fa1e3243a..7718b5c76fe6 100644 --- a/modules/challenge/src/main/Challenge.scala +++ b/modules/challenge/src/main/Challenge.scala @@ -4,17 +4,16 @@ import cats.derived.* import chess.format.Fen import chess.variant.{ Chess960, FromPosition, Horde, RacingKings, Variant } import chess.{ Color, Mode, Speed } -import scalalib.ThreadLocalRandom import reactivemongo.api.bson.Macros.Annotations.Key - +import scalalib.ThreadLocalRandom import scalalib.model.Days -import lila.core.i18n.I18nKey -import lila.core.{ challenge as hub } + +import lila.core.challenge as hub import lila.core.game.GameRule -import lila.rating.PerfType -import lila.core.user.WithPerf -import lila.core.user.GameUser +import lila.core.i18n.I18nKey import lila.core.id.GameFullId +import lila.core.user.{ GameUser, WithPerf } +import lila.rating.PerfType case class Challenge( @Key("_id") id: ChallengeId, diff --git a/modules/challenge/src/main/ChallengeApi.scala b/modules/challenge/src/main/ChallengeApi.scala index a4fcc9f98313..baef8f5b863a 100644 --- a/modules/challenge/src/main/ChallengeApi.scala +++ b/modules/challenge/src/main/ChallengeApi.scala @@ -1,9 +1,8 @@ package lila.challenge import lila.common.Bus - -import lila.core.socket.SendTo import lila.core.i18n.LangPicker +import lila.core.socket.SendTo import lila.memo.CacheApi.* final class ChallengeApi( diff --git a/modules/challenge/src/main/ChallengeBulk.scala b/modules/challenge/src/main/ChallengeBulk.scala index 3d172eaae428..9be830c2cd6d 100644 --- a/modules/challenge/src/main/ChallengeBulk.scala +++ b/modules/challenge/src/main/ChallengeBulk.scala @@ -3,16 +3,15 @@ package lila.challenge import akka.stream.scaladsl.* import chess.{ ByColor, Clock, Speed } import reactivemongo.api.bson.* +import scalalib.model.Days +import lila.challenge.ChallengeBulkSetup.{ ScheduledBulk, ScheduledGame, maxBulks } import lila.common.{ Bus, LilaStream } -import lila.db.dsl.{ *, given } +import lila.core.data.Template import lila.core.misc.map.TellMany -import lila.rating.PerfType import lila.core.round.StartClock -import lila.challenge.ChallengeBulkSetup.{ ScheduledBulk, ScheduledGame, maxBulks } - -import lila.core.data.Template -import scalalib.model.Days +import lila.db.dsl.{ *, given } +import lila.rating.PerfType final class ChallengeBulkApi( colls: ChallengeColls, diff --git a/modules/challenge/src/main/ChallengeBulkSetup.scala b/modules/challenge/src/main/ChallengeBulkSetup.scala index e86ec9ddbae3..0de869a3fd30 100644 --- a/modules/challenge/src/main/ChallengeBulkSetup.scala +++ b/modules/challenge/src/main/ChallengeBulkSetup.scala @@ -4,19 +4,17 @@ import akka.stream.scaladsl.* import chess.format.Fen import chess.variant.{ FromPosition, Variant } import chess.{ ByColor, Clock, Mode } -import scalalib.ThreadLocalRandom import play.api.data.* import play.api.data.Forms.* import play.api.libs.json.Json +import scalalib.ThreadLocalRandom +import scalalib.model.Days import lila.core.data.Template +import lila.core.game.GameRule import lila.core.net.Bearer import lila.game.IdGenerator -import lila.core.game.GameRule import lila.oauth.{ EndpointScopes, OAuthScope, OAuthServer } -import lila.rating.PerfType - -import scalalib.model.Days final class ChallengeBulkSetup(setupForm: lila.core.setup.SetupForm)(using lila.core.config.RateLimit): diff --git a/modules/challenge/src/main/ChallengeGranter.scala b/modules/challenge/src/main/ChallengeGranter.scala index cce3747dbc1c..a678f1f5bea2 100644 --- a/modules/challenge/src/main/ChallengeGranter.scala +++ b/modules/challenge/src/main/ChallengeGranter.scala @@ -1,10 +1,9 @@ package lila.challenge import lila.core.i18n.I18nKey.challenge as trans -import lila.rating.PerfType -import lila.core.relation.Relation.{ Block, Follow } - import lila.core.i18n.Translate +import lila.core.relation.Relation.{ Block, Follow } +import lila.rating.PerfType case class ChallengeDenied(dest: User, reason: ChallengeDenied.Reason) diff --git a/modules/challenge/src/main/ChallengeMaker.scala b/modules/challenge/src/main/ChallengeMaker.scala index cabf8ad7125b..0f6a9956209f 100644 --- a/modules/challenge/src/main/ChallengeMaker.scala +++ b/modules/challenge/src/main/ChallengeMaker.scala @@ -1,11 +1,10 @@ package lila.challenge +import lila.core.game.Player +import lila.core.user.{ GameUser, WithPerf } import lila.game.{ GameRepo, Rematches } import Challenge.TimeControl -import lila.core.user.WithPerf -import lila.core.user.GameUser -import lila.core.game.Player final class ChallengeMaker( userApi: lila.core.user.UserApi, diff --git a/modules/challenge/src/main/ChallengeMsg.scala b/modules/challenge/src/main/ChallengeMsg.scala index c503f7dcb6c8..3650a1041d86 100644 --- a/modules/challenge/src/main/ChallengeMsg.scala +++ b/modules/challenge/src/main/ChallengeMsg.scala @@ -2,8 +2,8 @@ package lila.challenge import chess.ByColor -import lila.core.data.Template import lila.core.LightUser +import lila.core.data.Template final class ChallengeMsg(msgApi: lila.core.msg.MsgApi)(using Executor): diff --git a/modules/challenge/src/main/ChallengeSocket.scala b/modules/challenge/src/main/ChallengeSocket.scala index 7a9bee36aeea..5fbee9d5e40e 100644 --- a/modules/challenge/src/main/ChallengeSocket.scala +++ b/modules/challenge/src/main/ChallengeSocket.scala @@ -2,8 +2,8 @@ package lila.challenge import play.api.libs.json.* -import lila.room.RoomSocket.{ Protocol as RP, * } import lila.core.socket.{ protocol as P, * } +import lila.room.RoomSocket.{ Protocol as RP, * } final private class ChallengeSocket( api: ChallengeApi, diff --git a/modules/challenge/src/main/JsonView.scala b/modules/challenge/src/main/JsonView.scala index 827a8dfdf6b2..f6e45c4fa169 100644 --- a/modules/challenge/src/main/JsonView.scala +++ b/modules/challenge/src/main/JsonView.scala @@ -1,16 +1,13 @@ package lila.challenge - -import play.api.i18n.Lang import play.api.libs.json.* import lila.common.Json.given +import lila.core.i18n.{ I18nKey as trans, JsDump, Translate } +import lila.core.id.GameFullId +import lila.core.socket.{ SocketVersion, userLag } +import lila.game.JsonView.given import lila.ui.Icon import lila.ui.Icon.iconWrites -import lila.game.JsonView.given -import lila.core.i18n.I18nKey as trans -import lila.core.socket.{ SocketVersion, userLag } -import lila.core.i18n.{ Translate, JsDump } -import lila.core.id.GameFullId final class JsonView( baseUrl: lila.core.config.BaseUrl, diff --git a/modules/challenge/src/main/ui/ChallengeUi.scala b/modules/challenge/src/main/ui/ChallengeUi.scala index 604f877ba12f..5ce47f553ab6 100644 --- a/modules/challenge/src/main/ui/ChallengeUi.scala +++ b/modules/challenge/src/main/ui/ChallengeUi.scala @@ -3,12 +3,13 @@ package ui import play.api.libs.json.{ JsObject, Json } -import lila.ui.* -import ScalatagsTemplate.{ *, given } -import lila.core.LightUser import lila.challenge.Challenge.Status -import lila.core.user.WithPerf +import lila.core.LightUser import lila.core.game.GameRule +import lila.core.user.WithPerf +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class ChallengeUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/chat/src/main/ChatApi.scala b/modules/chat/src/main/ChatApi.scala index 71f860422327..bdaad1c5fa8f 100644 --- a/modules/chat/src/main/ChatApi.scala +++ b/modules/chat/src/main/ChatApi.scala @@ -2,14 +2,14 @@ package lila.chat import lila.common.Bus import lila.common.String.{ fullCleanUp, noShouting } +import lila.core.chat.{ OnReinstate, OnTimeout } import lila.core.config.NetDomain -import lila.db.dsl.{ *, given } -import lila.core.shutup.PublicSource -import lila.memo.CacheApi.* import lila.core.perm.Granter -import lila.core.security.{ FloodSource, FloodApi, SpamApi } -import lila.core.chat.{ OnTimeout, OnReinstate } +import lila.core.security.{ FloodApi, FloodSource, SpamApi } +import lila.core.shutup.PublicSource import lila.core.user.{ FlairGet, FlairGetMap } +import lila.db.dsl.{ *, given } +import lila.memo.CacheApi.* final class ChatApi( coll: Coll, diff --git a/modules/chat/src/main/ChatTimeout.scala b/modules/chat/src/main/ChatTimeout.scala index 8d91744c250b..6f2950eb5bac 100644 --- a/modules/chat/src/main/ChatTimeout.scala +++ b/modules/chat/src/main/ChatTimeout.scala @@ -1,9 +1,9 @@ package lila.chat -import scalalib.ThreadLocalRandom import play.api.data.Form import play.api.data.Forms.* import reactivemongo.api.bson.* +import scalalib.ThreadLocalRandom import lila.db.dsl.{ *, given } diff --git a/modules/chat/src/main/ChatUi.scala b/modules/chat/src/main/ChatUi.scala index e745fdfd79c4..d6bd9cb4dcc2 100644 --- a/modules/chat/src/main/ChatUi.scala +++ b/modules/chat/src/main/ChatUi.scala @@ -2,8 +2,9 @@ package lila.chat import play.api.libs.json.* -import lila.common.Json.{ *, given } +import lila.common.Json.given import lila.ui.* + import ScalatagsTemplate.{ *, given } final class ChatUi(helpers: Helpers): diff --git a/modules/chat/src/main/Env.scala b/modules/chat/src/main/Env.scala index e0e919101726..faa5841acdb6 100644 --- a/modules/chat/src/main/Env.scala +++ b/modules/chat/src/main/Env.scala @@ -5,8 +5,7 @@ import play.api.Configuration import lila.common.autoconfig.{ *, given } import lila.core.config.* -import lila.core.user.FlairGet -import lila.core.user.FlairGetMap +import lila.core.user.{ FlairGet, FlairGetMap } private case class ChatConfig( @ConfigName("collection.chat") chatColl: CollName, diff --git a/modules/chat/src/main/Line.scala b/modules/chat/src/main/Line.scala index 5743e0998231..790d5feedc96 100644 --- a/modules/chat/src/main/Line.scala +++ b/modules/chat/src/main/Line.scala @@ -1,8 +1,7 @@ package lila.chat -import reactivemongo.api.bson.* - import chess.{ Color, PlayerTitle } +import reactivemongo.api.bson.* case class UserLine( username: UserName, diff --git a/modules/clas/src/main/ClasApi.scala b/modules/clas/src/main/ClasApi.scala index 23ef600e90e0..be9fba543684 100644 --- a/modules/clas/src/main/ClasApi.scala +++ b/modules/clas/src/main/ClasApi.scala @@ -1,16 +1,15 @@ package lila.clas -import scalalib.ThreadLocalRandom import play.api.i18n.Lang import reactivemongo.api.* +import scalalib.ThreadLocalRandom -import lila.core.config.BaseUrl import lila.common.Markdown -import lila.db.dsl.{ *, given } +import lila.core.config.BaseUrl +import lila.core.id.{ ClasId, ClasInviteId, StudentId } import lila.core.msg.MsgApi -import lila.rating.{ Perf, UserPerfs } -import lila.rating.PerfType -import lila.core.id.{ ClasId, StudentId, ClasInviteId } +import lila.db.dsl.{ *, given } +import lila.rating.{ Perf, PerfType, UserPerfs } final class ClasApi( colls: ClasColls, diff --git a/modules/clas/src/main/ClasProgress.scala b/modules/clas/src/main/ClasProgress.scala index fba5ee10b269..7f2366c862fe 100644 --- a/modules/clas/src/main/ClasProgress.scala +++ b/modules/clas/src/main/ClasProgress.scala @@ -2,14 +2,15 @@ package lila.clas import reactivemongo.api.* import reactivemongo.api.bson.* -import java.time.Duration import scalalib.model.Days +import java.time.Duration + +import lila.core.game.GameRepo +import lila.core.user.WithPerf import lila.db.dsl.{ *, given } -import lila.core.game.{ GameRepo } import lila.puzzle.PuzzleRound import lila.rating.PerfType -import lila.core.user.WithPerf case class ClasProgress( perfType: PerfType, diff --git a/modules/clas/src/main/Student.scala b/modules/clas/src/main/Student.scala index c5c4ae23ac07..fa6b531b5d6a 100644 --- a/modules/clas/src/main/Student.scala +++ b/modules/clas/src/main/Student.scala @@ -2,9 +2,9 @@ package lila.clas import reactivemongo.api.bson.Macros.Annotations.Key +import lila.core.id.{ ClasId, StudentId } import lila.core.perf.{ UserPerfs, UserWithPerfs } import lila.core.security.ClearPassword -import lila.core.id.{ ClasId, StudentId } case class Student( @Key("_id") id: StudentId, // userId:clasId diff --git a/modules/clas/src/main/ui/ClasPages.scala b/modules/clas/src/main/ui/ClasPages.scala index 4b2730c58ef0..f862e3438925 100644 --- a/modules/clas/src/main/ui/ClasPages.scala +++ b/modules/clas/src/main/ui/ClasPages.scala @@ -1,9 +1,11 @@ package lila.clas package ui +import play.api.data.Form + import lila.ui.* + import ScalatagsTemplate.{ *, given } -import play.api.data.Form final class ClasPages(helpers: Helpers, clasUi: ClasUi, dashUi: DashboardUi): import helpers.{ *, given } diff --git a/modules/clas/src/main/ui/ClasUi.scala b/modules/clas/src/main/ui/ClasUi.scala index cb24a914817e..04468b2bee5b 100644 --- a/modules/clas/src/main/ui/ClasUi.scala +++ b/modules/clas/src/main/ui/ClasUi.scala @@ -1,11 +1,8 @@ package lila.clas package ui - -import play.api.data.Form - import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.user.WithPerfsAndEmails final class ClasUi(helpers: lila.ui.Helpers)( searchMenu: Context ?=> Frag diff --git a/modules/clas/src/main/ui/DashboardUi.scala b/modules/clas/src/main/ui/DashboardUi.scala index 7fba28fdfbdc..0074025e90f7 100644 --- a/modules/clas/src/main/ui/DashboardUi.scala +++ b/modules/clas/src/main/ui/DashboardUi.scala @@ -3,12 +3,12 @@ package ui import play.api.data.Form -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.config.NetDomain import lila.core.perf.UserPerfs -import lila.core.i18n.Translate -import lila.rating.UserPerfsExt.{ bestRating, bestAny3Perfs } +import lila.rating.UserPerfsExt.{ bestAny3Perfs, bestRating } +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class DashboardUi(helpers: Helpers, ui: ClasUi)(using NetDomain): import helpers.{ *, given } diff --git a/modules/clas/src/main/ui/StudentFormUi.scala b/modules/clas/src/main/ui/StudentFormUi.scala index ee980dccc8f1..b97f7679da6f 100644 --- a/modules/clas/src/main/ui/StudentFormUi.scala +++ b/modules/clas/src/main/ui/StudentFormUi.scala @@ -4,8 +4,8 @@ package ui import play.api.data.Form import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.config.NetDomain final class StudentFormUi(helpers: Helpers, clasUi: ClasUi, studentUi: StudentUi): import helpers.{ *, given } diff --git a/modules/clas/src/main/ui/StudentUi.scala b/modules/clas/src/main/ui/StudentUi.scala index 5b06b7d3bb79..b07973612b7c 100644 --- a/modules/clas/src/main/ui/StudentUi.scala +++ b/modules/clas/src/main/ui/StudentUi.scala @@ -1,9 +1,10 @@ package lila.clas package ui +import lila.core.config.NetDomain import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.config.NetDomain final class StudentUi(helpers: Helpers, clasUi: ClasUi)(using NetDomain): import helpers.{ *, given } diff --git a/modules/cms/src/main/CmsApi.scala b/modules/cms/src/main/CmsApi.scala index 4d7886e6e7d9..9ebe0df298a8 100644 --- a/modules/cms/src/main/CmsApi.scala +++ b/modules/cms/src/main/CmsApi.scala @@ -1,12 +1,9 @@ package lila.cms - -import play.api.i18n.Lang -import play.api.mvc.RequestHeader import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } -import lila.core.i18n.{ LangPicker, LangList, Language, defaultLanguage } +import lila.core.i18n.{ LangList, LangPicker, Language, defaultLanguage } import lila.core.id.{ CmsPageId, CmsPageKey } +import lila.db.dsl.{ *, given } import lila.ui.Context final class CmsApi(coll: Coll, markup: CmsMarkup, langList: LangList, langPicker: LangPicker)(using Executor): diff --git a/modules/cms/src/main/CmsMarkup.scala b/modules/cms/src/main/CmsMarkup.scala index 8881ac0904ca..41e4e6713e34 100644 --- a/modules/cms/src/main/CmsMarkup.scala +++ b/modules/cms/src/main/CmsMarkup.scala @@ -2,8 +2,8 @@ package lila.cms import lila.common.{ Markdown, MarkdownRender, MarkdownToastUi } import lila.core.config -import lila.memo.CacheApi import lila.core.id.CmsPageId +import lila.memo.CacheApi final class CmsMarkup( baseUrl: config.BaseUrl, diff --git a/modules/cms/src/main/CmsUi.scala b/modules/cms/src/main/CmsUi.scala index 660e867e1a22..ca4d42dcd0ff 100644 --- a/modules/cms/src/main/CmsUi.scala +++ b/modules/cms/src/main/CmsUi.scala @@ -2,13 +2,12 @@ package lila.cms package ui import play.api.data.Form -import play.api.libs.json.* +import lila.cms.CmsForm.CmsPageData +import lila.core.id.{ CmsPageId, CmsPageKey } import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.id.CmsPageId -import lila.core.id.CmsPageKey -import lila.cms.CmsForm.CmsPageData final class CmsUi(helpers: Helpers)(menu: Context ?=> Frag): import helpers.{ *, given } diff --git a/modules/cms/src/main/Env.scala b/modules/cms/src/main/Env.scala index ff2f9b85d1ef..ea42582d879d 100644 --- a/modules/cms/src/main/Env.scala +++ b/modules/cms/src/main/Env.scala @@ -3,8 +3,8 @@ package lila.cms import com.softwaremill.macwire.* import lila.core.config.{ AssetBaseUrl, BaseUrl, CollName } -import lila.memo.CacheApi import lila.core.id.CmsPageKey +import lila.memo.CacheApi @Module final class Env( diff --git a/modules/coach/src/main/Coach.scala b/modules/coach/src/main/Coach.scala index a7fb81e2b485..950a1f677261 100644 --- a/modules/coach/src/main/Coach.scala +++ b/modules/coach/src/main/Coach.scala @@ -1,9 +1,10 @@ package lila.coach import reactivemongo.api.bson.Macros.Annotations.Key + +import lila.core.id.ImageId import lila.core.perf.UserWithPerfs import lila.rating.UserPerfsExt.bestStandardRating -import lila.core.id.ImageId case class Coach( @Key("_id") id: Coach.Id, // user ID diff --git a/modules/coach/src/main/CoachApi.scala b/modules/coach/src/main/CoachApi.scala index 881aabee1120..68da9199ba7a 100644 --- a/modules/coach/src/main/CoachApi.scala +++ b/modules/coach/src/main/CoachApi.scala @@ -1,9 +1,8 @@ package lila.coach +import lila.core.perm.Granter import lila.db.dsl.{ *, given } import lila.memo.PicfitApi -import lila.core.perm.Granter -import lila.core.perf.UserPerfs import lila.rating.UserPerfsExt.bestStandardRating final class CoachApi( diff --git a/modules/coach/src/main/CoachPager.scala b/modules/coach/src/main/CoachPager.scala index cc9f7c93fb7d..64c184cd0d2e 100644 --- a/modules/coach/src/main/CoachPager.scala +++ b/modules/coach/src/main/CoachPager.scala @@ -2,15 +2,13 @@ package lila.coach import play.api.i18n.Lang import reactivemongo.api.* +import scalalib.paginator.{ AdapterLike, Paginator } import lila.coach.CoachPager.Order.{ Alphabetical, LichessRating, Login } -import scalalib.paginator.{ AdapterLike, Paginator } -import lila.db.dsl.{ *, given } -import lila.core.perm.Permission -import lila.core.perf.UserPerfs -import lila.core.user.UserMark import lila.core.perf.UserWithPerfs -import lila.core.user.Flag +import lila.core.perm.Permission +import lila.core.user.{ Flag, UserMark } +import lila.db.dsl.{ *, given } final class CoachPager( userRepo: lila.core.user.UserRepo, diff --git a/modules/coach/src/main/ui/CoachEditUi.scala b/modules/coach/src/main/ui/CoachEditUi.scala index 4a1e69e9b089..028961a4855c 100644 --- a/modules/coach/src/main/ui/CoachEditUi.scala +++ b/modules/coach/src/main/ui/CoachEditUi.scala @@ -1,16 +1,15 @@ package lila.coach package ui -import play.api.libs.json.Json import play.api.data.Form -import scalalib.paginator.Paginator +import play.api.libs.json.Json import lila.ui.* + import ScalatagsTemplate.{ *, given } final class CoachEditUi(helpers: Helpers, ui: CoachUi): import helpers.{ *, given } - import trans.{ coach as trc } private val dataTab = attr("data-tab") diff --git a/modules/coach/src/main/ui/CoachUi.scala b/modules/coach/src/main/ui/CoachUi.scala index d3efb32c1e4c..81ed4e103f47 100644 --- a/modules/coach/src/main/ui/CoachUi.scala +++ b/modules/coach/src/main/ui/CoachUi.scala @@ -1,15 +1,16 @@ package lila.coach package ui +import play.api.i18n.Lang import scalalib.paginator.Paginator -import lila.ui.* -import ScalatagsTemplate.{ *, given } -import lila.rating.UserPerfsExt.{ best6Perfs, hasEstablishedRating } -import lila.core.data.RichText import lila.core.config.NetDomain -import play.api.i18n.Lang +import lila.core.data.RichText import lila.core.user.{ Flag, Profile } +import lila.rating.UserPerfsExt.{ best6Perfs, hasEstablishedRating } +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class CoachUi(helpers: Helpers)( picfitUrl: lila.core.misc.PicfitUrl, diff --git a/modules/common/src/main/Bus.scala b/modules/common/src/main/Bus.scala index 775cc22699d2..2937e4b0ea91 100644 --- a/modules/common/src/main/Bus.scala +++ b/modules/common/src/main/Bus.scala @@ -1,11 +1,12 @@ package lila.common import akka.actor.{ ActorRef, Scheduler } -import lila.core.bus.{ Channel, WithChannel } import scala.jdk.CollectionConverters.* import scala.reflect.Typeable +import lila.core.bus.{ Channel, WithChannel } + trait Tellable extends Any: def !(msg: Matchable): Unit diff --git a/modules/common/src/main/Chronometer.scala b/modules/common/src/main/Chronometer.scala index 6af6ec9ddae4..cd0efde1bd03 100644 --- a/modules/common/src/main/Chronometer.scala +++ b/modules/common/src/main/Chronometer.scala @@ -4,7 +4,7 @@ object Chronometer: object futureExtension: - import scala.concurrent.{ Await, ExecutionContext as EC } + import scala.concurrent.Await extension [A](fua: Future[A]) def await(duration: FiniteDuration, name: String): A = diff --git a/modules/common/src/main/Form.scala b/modules/common/src/main/Form.scala index f97116eec9bd..3803640b3870 100644 --- a/modules/common/src/main/Form.scala +++ b/modules/common/src/main/Form.scala @@ -5,12 +5,11 @@ import play.api.data.Forms.* import play.api.data.format.Formats.* import play.api.data.format.Formatter import play.api.data.validation.{ Constraint, Constraints } -import play.api.data.{ Field, Form as PlayForm, FormError, Mapping, validation as V } +import play.api.data.{ Form as PlayForm, FormError, Mapping, validation as V } import java.lang import java.time.LocalDate import scala.util.Try -import play.api.data.FieldMapping object Form: diff --git a/modules/common/src/main/Iso.scala b/modules/common/src/main/Iso.scala index c365e66f9af2..9a47889d4879 100644 --- a/modules/common/src/main/Iso.scala +++ b/modules/common/src/main/Iso.scala @@ -1,11 +1,10 @@ package lila.common -import lila.core.data.Strings -import lila.core.data.Ints -import lila.core.net.IpAddress - import scalalib.Iso as LibIso +import lila.core.data.{ Ints, Strings } +import lila.core.net.IpAddress + object Iso: export scalalib.Iso diff --git a/modules/common/src/main/Json.scala b/modules/common/src/main/Json.scala index 4d4ca8858f2b..0786a1fc9ffa 100644 --- a/modules/common/src/main/Json.scala +++ b/modules/common/src/main/Json.scala @@ -1,7 +1,7 @@ package lila.common -import play.api.libs.json.{ Json as PlayJson, * } import io.mola.galimatias.URL +import play.api.libs.json.{ Json as PlayJson, * } object Json: diff --git a/modules/common/src/main/LilaFuture.scala b/modules/common/src/main/LilaFuture.scala index b70b4b09edbe..8f66732ceeda 100644 --- a/modules/common/src/main/LilaFuture.scala +++ b/modules/common/src/main/LilaFuture.scala @@ -2,8 +2,8 @@ package lila.common import akka.actor.Scheduler -import scala.concurrent.duration.FiniteDuration import scala.concurrent.Promise +import scala.concurrent.duration.FiniteDuration object LilaFuture: diff --git a/modules/common/src/main/MarkdownRender.scala b/modules/common/src/main/MarkdownRender.scala index ae279db36765..21253c167ac6 100644 --- a/modules/common/src/main/MarkdownRender.scala +++ b/modules/common/src/main/MarkdownRender.scala @@ -35,9 +35,7 @@ import scala.jdk.CollectionConverters.* import scala.util.Try import scala.util.matching.Regex -import lila.common.RawHtml -import lila.core.config.AssetDomain -import lila.core.config.NetDomain +import lila.core.config.{ AssetDomain, NetDomain } import lila.core.misc.lpv.LpvEmbed final class MarkdownRender( diff --git a/modules/common/src/main/RawHtml.scala b/modules/common/src/main/RawHtml.scala index 6a9b980c0741..43f3c5c660a3 100644 --- a/modules/common/src/main/RawHtml.scala +++ b/modules/common/src/main/RawHtml.scala @@ -1,5 +1,6 @@ package lila.common +import scalalib.StringUtils.{ escapeHtmlRaw, escapeHtmlRawInPlace } import scalatags.Text.all.* import java.lang.Character.isLetterOrDigit @@ -7,8 +8,7 @@ import java.lang.{ Math, StringBuilder as jStringBuilder } import java.util.regex.Matcher import scala.annotation.{ switch, tailrec } -import scalalib.StringUtils.{ escapeHtmlRaw, escapeHtmlRawInPlace } -import lila.common.{ Html, config } +import lila.common.Html import lila.core.config.NetDomain import lila.core.misc.lpv.LinkRender diff --git a/modules/common/src/main/String.scala b/modules/common/src/main/String.scala index 3dec12da8f54..df771d570759 100644 --- a/modules/common/src/main/String.scala +++ b/modules/common/src/main/String.scala @@ -1,13 +1,10 @@ package lila.common import play.api.libs.json.* +import scalalib.StringUtils.{ escapeHtmlRaw, safeJsonString } import scalatags.Text.all.* -import java.text.Normalizer - -import lila.common.RawHtml import lila.core.config.NetDomain -import scalalib.StringUtils.{ escapeHtmlRaw, safeJsonString } import lila.core.data.SafeJsonStr object String: diff --git a/modules/common/src/main/config.scala b/modules/common/src/main/config.scala index de7467d9dcf1..6ece3fe05916 100644 --- a/modules/common/src/main/config.scala +++ b/modules/common/src/main/config.scala @@ -4,7 +4,6 @@ import play.api.ConfigLoader import scala.jdk.CollectionConverters.* -import lila.common.autoconfig.* import lila.core.config.* object config: diff --git a/modules/common/src/main/mon.scala b/modules/common/src/main/mon.scala index 6c261978b753..e8b6577fac10 100644 --- a/modules/common/src/main/mon.scala +++ b/modules/common/src/main/mon.scala @@ -4,8 +4,8 @@ import com.github.benmanes.caffeine.cache.Cache as CaffeineCache import kamon.metric.{ Counter, Timer } import kamon.tag.TagSet -import lila.core.net.* import lila.core.id.* +import lila.core.net.* object mon: diff --git a/modules/common/src/test/AutoConfigTest.scala b/modules/common/src/test/AutoConfigTest.scala index 353058be8f15..e3f2288c3eae 100644 --- a/modules/common/src/test/AutoConfigTest.scala +++ b/modules/common/src/test/AutoConfigTest.scala @@ -4,6 +4,7 @@ import com.typesafe.config.* import play.api.{ ConfigLoader, Configuration } import scala.concurrent.duration.* + import lila.core.config.ConfigName class AutoConfigTest extends munit.FunSuite: diff --git a/modules/common/src/test/MarkdownTest.scala b/modules/common/src/test/MarkdownTest.scala index cfcbdeac3db0..9eda9bf4b80e 100644 --- a/modules/common/src/test/MarkdownTest.scala +++ b/modules/common/src/test/MarkdownTest.scala @@ -2,9 +2,8 @@ package lila.common import chess.format.pgn.PgnStr -import lila.core.config.AssetDomain +import lila.core.config.{ AssetDomain, NetDomain } import lila.core.misc.lpv.LpvEmbed -import lila.core.config.NetDomain class MarkdownTest extends munit.FunSuite: diff --git a/modules/common/src/test/RawHtmlTest.scala b/modules/common/src/test/RawHtmlTest.scala index afe5d625e3be..63c9e410017a 100644 --- a/modules/common/src/test/RawHtmlTest.scala +++ b/modules/common/src/test/RawHtmlTest.scala @@ -1,8 +1,9 @@ package lila.common -import RawHtml.* import lila.core.config.NetDomain +import RawHtml.* + class RawHtmlTest extends munit.FunSuite: given NetDomain = NetDomain("lichess.org") diff --git a/modules/common/src/test/StringTest.scala b/modules/common/src/test/StringTest.scala index e327cfb389b5..0cfcbc1f4df8 100644 --- a/modules/common/src/test/StringTest.scala +++ b/modules/common/src/test/StringTest.scala @@ -1,6 +1,7 @@ package lila.common import scalatags.Text.all.* + import lila.core.config.NetDomain class StringTest extends munit.FunSuite: diff --git a/modules/coordinate/src/main/CoordinateUi.scala b/modules/coordinate/src/main/CoordinateUi.scala index bab2b880b10a..d2a893044dee 100644 --- a/modules/coordinate/src/main/CoordinateUi.scala +++ b/modules/coordinate/src/main/CoordinateUi.scala @@ -3,9 +3,10 @@ package ui import play.api.libs.json.Json -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.i18n.I18nKey +import lila.ui.* + +import ScalatagsTemplate.* final class CoordinateUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/core/src/main/LightUser.scala b/modules/core/src/main/LightUser.scala index a43178b34b5d..5425515320f9 100644 --- a/modules/core/src/main/LightUser.scala +++ b/modules/core/src/main/LightUser.scala @@ -1,10 +1,12 @@ package lila.core import _root_.chess.PlayerTitle -import lila.core.userId.* -import lila.core.id.Flair + import scala.concurrent.ExecutionContext +import lila.core.id.Flair +import lila.core.userId.* + case class LightUser( id: UserId, name: UserName, diff --git a/modules/core/src/main/captcha.scala b/modules/core/src/main/captcha.scala index c9202c5c52c3..0c49697ac6a8 100644 --- a/modules/core/src/main/captcha.scala +++ b/modules/core/src/main/captcha.scala @@ -1,8 +1,8 @@ package lila.core package captcha -import _root_.chess.format.BoardFen import _root_.chess.Color +import _root_.chess.format.BoardFen import lila.core.id.GameId diff --git a/modules/core/src/main/challenge.scala b/modules/core/src/main/challenge.scala index 5a05490087c6..96eff0a2d1a9 100644 --- a/modules/core/src/main/challenge.scala +++ b/modules/core/src/main/challenge.scala @@ -3,11 +3,11 @@ package challenge import _root_.chess.variant.Variant import _root_.chess.{ Color, Mode } - import scalalib.model.Days -import lila.core.userId.UserId + import lila.core.id.ChallengeId import lila.core.rating.data.* +import lila.core.userId.UserId trait Challenge: import Challenge.* diff --git a/modules/core/src/main/chat.scala b/modules/core/src/main/chat.scala index 9be6ca8bd719..c6e15a03c648 100644 --- a/modules/core/src/main/chat.scala +++ b/modules/core/src/main/chat.scala @@ -2,8 +2,9 @@ package lila.core package chat import play.api.libs.json.JsObject -import lila.core.shutup.PublicSource + import lila.core.id.ChatId +import lila.core.shutup.PublicSource import lila.core.userId.* case class ChatLine(chatId: ChatId, line: Line, json: JsObject) diff --git a/modules/core/src/main/data.scala b/modules/core/src/main/data.scala index 781ffc0c25cc..eb997fb94e10 100644 --- a/modules/core/src/main/data.scala +++ b/modules/core/src/main/data.scala @@ -1,6 +1,7 @@ package lila.core import scalalib.newtypes.OpaqueString + import scala.concurrent.ExecutionContext import lila.core.userId.UserId diff --git a/modules/core/src/main/db.scala b/modules/core/src/main/db.scala index 10b4c12dc294..b8223e5be2ab 100644 --- a/modules/core/src/main/db.scala +++ b/modules/core/src/main/db.scala @@ -1,8 +1,8 @@ package lila.core package db -import reactivemongo.api.bson.collection.BSONCollection import alleycats.Zero +import reactivemongo.api.bson.collection.BSONCollection trait AsyncCollFailingSilently: def apply[A](f: BSONCollection => Fu[A])(using Zero[A]): Fu[A] diff --git a/modules/core/src/main/email.scala b/modules/core/src/main/email.scala index e9eca070b50a..a7f5d2c56d3c 100644 --- a/modules/core/src/main/email.scala +++ b/modules/core/src/main/email.scala @@ -1,8 +1,9 @@ package lila.core -import lila.core.net.Domain import scalalib.newtypes.OpaqueString +import lila.core.net.Domain + object email: opaque type EmailAddress = String diff --git a/modules/core/src/main/fishnet.scala b/modules/core/src/main/fishnet.scala index 7e855f48a5bb..326eed0bd863 100644 --- a/modules/core/src/main/fishnet.scala +++ b/modules/core/src/main/fishnet.scala @@ -1,10 +1,10 @@ package lila.core package fishnet -import _root_.chess.format.{ Uci, Fen } +import _root_.chess.format.{ Fen, Uci } +import lila.core.id.{ GameId, StudyChapterId, StudyId } import lila.core.userId.UserId -import lila.core.id.{ GameId, StudyId, StudyChapterId } val maxPlies = 300 diff --git a/modules/core/src/main/forum.scala b/modules/core/src/main/forum.scala index f32d28f3858e..7d47822a1cb1 100644 --- a/modules/core/src/main/forum.scala +++ b/modules/core/src/main/forum.scala @@ -1,11 +1,11 @@ package lila.core package forum +import reactivemongo.api.bson.Macros.Annotations.Key + import lila.core.id.{ ForumCategId, ForumPostId, ForumTopicId, TeamId } import lila.core.userId.* -import reactivemongo.api.bson.Macros.Annotations.Key - enum BusForum: case CreatePost(post: ForumPostMini) case RemovePost(id: ForumPostId, by: Option[UserId], text: String, asAdmin: Boolean)(using val me: MyId) diff --git a/modules/core/src/main/game/Game.scala b/modules/core/src/main/game/Game.scala index 6ff0abf314e0..8fbf20b9018b 100644 --- a/modules/core/src/main/game/Game.scala +++ b/modules/core/src/main/game/Game.scala @@ -1,28 +1,29 @@ package lila.core package game -import scalalib.model.Days import _root_.chess.Color.{ Black, White } -import _root_.chess.format.pgn.SanStr import _root_.chess.format.Uci +import _root_.chess.format.pgn.SanStr import _root_.chess.opening.{ Opening, OpeningDb } import _root_.chess.variant.{ FromPosition, Standard, Variant } import _root_.chess.{ ByColor, Centis, Clock, - CorrespondenceClock, Color, + CorrespondenceClock, Game as ChessGame, Mode, Ply, Speed, Status } -import lila.core.id.{ GameId, GamePlayerId, GameFullId } -import lila.core.userId.{ UserId, UserIdOf } -import lila.core.user.User +import scalalib.model.Days + +import lila.core.id.{ GameFullId, GameId, GamePlayerId } import lila.core.perf.PerfKey +import lila.core.user.User +import lila.core.userId.{ UserId, UserIdOf } case class Game( id: GameId, diff --git a/modules/core/src/main/game/NewGame.scala b/modules/core/src/main/game/NewGame.scala index baff85beb757..c1177e9cf530 100644 --- a/modules/core/src/main/game/NewGame.scala +++ b/modules/core/src/main/game/NewGame.scala @@ -1,12 +1,12 @@ package lila.core package game -import scalalib.model.Days +import _root_.chess.format.Fen +import _root_.chess.{ ByColor, Game as ChessGame, Mode, Status } import scalalib.ThreadLocalRandom -import _root_.chess.{ Mode, ByColor, Status, Game as ChessGame } +import scalalib.model.Days import lila.core.id.GameId -import _root_.chess.format.Fen case class ImportedGame(sloppy: Game, initialFen: Option[Fen.Full] = None): diff --git a/modules/core/src/main/game/Player.scala b/modules/core/src/main/game/Player.scala index 157064f7001c..159971e70a11 100644 --- a/modules/core/src/main/game/Player.scala +++ b/modules/core/src/main/game/Player.scala @@ -2,12 +2,13 @@ package lila.core package game import _root_.chess.{ Color, PlayerName, Ply } +import cats.kernel.Eq + import lila.core.id.GamePlayerId -import lila.core.userId.{ UserId, UserIdOf } +import lila.core.perf.Perf import lila.core.rating.data.{ IntRating, IntRatingDiff, RatingProvisional } -import cats.kernel.Eq import lila.core.user.WithPerf -import lila.core.perf.Perf +import lila.core.userId.{ UserId, UserIdOf } case class Player( id: GamePlayerId, diff --git a/modules/core/src/main/game/data.scala b/modules/core/src/main/game/data.scala index 649677735886..1228ff525c9f 100644 --- a/modules/core/src/main/game/data.scala +++ b/modules/core/src/main/game/data.scala @@ -1,9 +1,10 @@ package lila.core package game -import _root_.chess.{ Centis, Clock, Color, Ply } import _root_.chess.format.pgn.PgnStr -import lila.core.id.{ TourId, SwissId, SimulId } +import _root_.chess.{ Centis, Clock, Color, Ply } + +import lila.core.id.{ SimulId, SwissId, TourId } import lila.core.userId.UserId case class GameMetadata( diff --git a/modules/core/src/main/game/light.scala b/modules/core/src/main/game/light.scala index a51faf49241b..3f1a0fcd34df 100644 --- a/modules/core/src/main/game/light.scala +++ b/modules/core/src/main/game/light.scala @@ -4,8 +4,8 @@ package game import _root_.chess.{ Color, Status } import lila.core.id.GameId -import lila.core.userId.UserId import lila.core.rating.data.{ IntRating, IntRatingDiff, RatingProvisional } +import lila.core.userId.UserId case class LightGame( id: GameId, diff --git a/modules/core/src/main/game/misc.scala b/modules/core/src/main/game/misc.scala index b1e6dab3dd70..34822b7dc238 100644 --- a/modules/core/src/main/game/misc.scala +++ b/modules/core/src/main/game/misc.scala @@ -1,21 +1,20 @@ package lila.core package game +import _root_.chess.format.Fen +import _root_.chess.format.pgn.{ ParsedPgn, Pgn, SanStr, Tags } +import _root_.chess.variant.Variant +import _root_.chess.{ ByColor, Centis, Clock, Color, Division, Ply, Speed, Status } import cats.derived.* import play.api.libs.json.* -import reactivemongo.api.bson.{ BSONHandler, BSONDocumentHandler } -import reactivemongo.api.bson.collection.BSONCollection import reactivemongo.akkastream.AkkaStreamCursor -import _root_.chess.{ Color, Clock, ByColor, Status, Speed, Ply, Centis, Division } -import _root_.chess.format.Fen -import _root_.chess.format.pgn.{ Pgn, SanStr, ParsedPgn, Tags } +import reactivemongo.api.bson.collection.BSONCollection +import reactivemongo.api.bson.{ BSONDocumentHandler, BSONHandler } -import lila.core.id.{ GameId, GameFullId, GamePlayerId, TeamId } -import lila.core.userId.UserId -import lila.core.perf.UserWithPerfs +import lila.core.id.{ GameFullId, GameId, GamePlayerId, TeamId } +import lila.core.perf.{ PerfKey, UserWithPerfs } import lila.core.user.User -import _root_.chess.variant.Variant -import lila.core.perf.PerfKey +import lila.core.userId.UserId val maxPlaying = Max(200) // including correspondence val maxPlayingRealtime = Max(100) diff --git a/modules/core/src/main/history.scala b/modules/core/src/main/history.scala index acb2283a9d8e..8ca1e4a354b0 100644 --- a/modules/core/src/main/history.scala +++ b/modules/core/src/main/history.scala @@ -3,13 +3,10 @@ package history import scalalib.model.Days -import lila.core.perf.Perf +import lila.core.perf.{ Perf, PerfKey } import lila.core.rating.data.IntRating - -import lila.core.user.WithPerf +import lila.core.user.{ User, WithPerf } import lila.core.userId.UserId -import lila.core.perf.PerfKey -import lila.core.user.User trait HistoryApi: def addPuzzle(user: User, completedAt: Instant, perf: Perf): Funit diff --git a/modules/core/src/main/lilaism/LilaLibraryExtensions.scala b/modules/core/src/main/lilaism/LilaLibraryExtensions.scala index b93ec1a378d0..ec7a0ed55a43 100644 --- a/modules/core/src/main/lilaism/LilaLibraryExtensions.scala +++ b/modules/core/src/main/lilaism/LilaLibraryExtensions.scala @@ -2,12 +2,13 @@ package lila.core.lilaism import alleycats.Zero import com.typesafe.config.Config +import scalalib.future.FutureAfter + import java.util.Base64 import java.util.concurrent.TimeUnit -import scala.concurrent.{ Future, ExecutionContext as EC } import scala.collection.BuildFrom +import scala.concurrent.{ ExecutionContext as EC, Future } import scala.util.Try -import scalalib.future.FutureAfter trait LilaLibraryExtensions extends CoreExports: diff --git a/modules/core/src/main/misc.scala b/modules/core/src/main/misc.scala index d0dca2595284..c9af3801846d 100644 --- a/modules/core/src/main/misc.scala +++ b/modules/core/src/main/misc.scala @@ -1,8 +1,8 @@ package lila.core package misc -import lila.core.userId.* import lila.core.id.GameId +import lila.core.userId.* package streamer: case class StreamStart(userId: UserId, streamerName: String) diff --git a/modules/core/src/main/net.scala b/modules/core/src/main/net.scala index 289254b4e74c..a86f56280a2b 100644 --- a/modules/core/src/main/net.scala +++ b/modules/core/src/main/net.scala @@ -2,11 +2,13 @@ package lila.core import io.mola.galimatias.IPv4Address.parseIPv4Address import io.mola.galimatias.IPv6Address.parseIPv6Address +import scalalib.SecureRandom + import java.net.InetAddress import scala.util.Try -import scalalib.SecureRandom -import lila.core.userId.UserId + import lila.core.socket.Sri +import lila.core.userId.UserId object net: diff --git a/modules/core/src/main/notify.scala b/modules/core/src/main/notify.scala index cbf1b2029c23..64ed27bf42e8 100644 --- a/modules/core/src/main/notify.scala +++ b/modules/core/src/main/notify.scala @@ -3,9 +3,9 @@ package notify import alleycats.Zero +import lila.core.chess.Win import lila.core.id.* import lila.core.study.data.StudyName -import lila.core.chess.Win import lila.core.userId.* opaque type UnreadCount = Int diff --git a/modules/core/src/main/perf.scala b/modules/core/src/main/perf.scala index b23abeed10eb..3e409d780b49 100644 --- a/modules/core/src/main/perf.scala +++ b/modules/core/src/main/perf.scala @@ -1,13 +1,11 @@ package lila.core -import _root_.chess.{ variant as ChessVariant } import _root_.chess.variant.Variant -import _root_.chess.Speed +import _root_.chess.{ Speed, variant as ChessVariant } -import lila.core.userId.UserId -import lila.core.rating.data.{ IntRating, IntRatingDiff } import lila.core.rating.Glicko -import lila.core.userId.UserIdOf +import lila.core.rating.data.{ IntRating, IntRatingDiff } +import lila.core.userId.{ UserId, UserIdOf } object perf: diff --git a/modules/core/src/main/perm.scala b/modules/core/src/main/perm.scala index 0b0bcaaab5e4..53ef025ae572 100644 --- a/modules/core/src/main/perm.scala +++ b/modules/core/src/main/perm.scala @@ -1,7 +1,7 @@ package lila.core package perm -import lila.core.user.{ User, Me } +import lila.core.user.{ Me, User } object Granter: diff --git a/modules/core/src/main/pool.scala b/modules/core/src/main/pool.scala index 69b58ba1912f..e6b9f5723c68 100644 --- a/modules/core/src/main/pool.scala +++ b/modules/core/src/main/pool.scala @@ -1,15 +1,15 @@ package lila.core package pool +import _root_.chess.{ ByColor, Clock } import alleycats.Zero -import _root_.chess.{ Clock, ByColor } +import lila.core.id.GameFullId +import lila.core.perf.PerfKey import lila.core.rating.RatingRange import lila.core.rating.data.IntRating import lila.core.socket.Sri -import lila.core.id.GameFullId import lila.core.userId.* -import lila.core.perf.PerfKey opaque type Blocking = Set[UserId] object Blocking extends TotalWrapper[Blocking, Set[UserId]]: diff --git a/modules/core/src/main/practice.scala b/modules/core/src/main/practice.scala index b66aafab39d6..f542f7fb161a 100644 --- a/modules/core/src/main/practice.scala +++ b/modules/core/src/main/practice.scala @@ -1,7 +1,7 @@ package lila.core package practice -import lila.core.id.{ StudyId, StudyChapterId } +import lila.core.id.{ StudyChapterId, StudyId } import lila.core.study.data.StudyName import lila.core.userId.UserId diff --git a/modules/core/src/main/pref.scala b/modules/core/src/main/pref.scala index 2d2311e77abc..c8ba49cdece9 100644 --- a/modules/core/src/main/pref.scala +++ b/modules/core/src/main/pref.scala @@ -1,8 +1,8 @@ package lila.core package pref -import lila.core.userId.UserId import lila.core.user.User +import lila.core.userId.UserId trait Pref: val id: UserId diff --git a/modules/core/src/main/round.scala b/modules/core/src/main/round.scala index 9386ebc7a415..45a457854355 100644 --- a/modules/core/src/main/round.scala +++ b/modules/core/src/main/round.scala @@ -1,14 +1,14 @@ package lila.core package round +import _root_.chess.format.{ Fen, Uci } import _root_.chess.{ Color, Move } -import _root_.chess.format.{ Uci, Fen } import play.api.libs.json.{ JsArray, JsObject } + +import lila.core.game.Game +import lila.core.id.{ GameAnyId, GameId, GamePlayerId, SimulId, TourId } import lila.core.net.IpAddress -import lila.core.id.{ GameId, GamePlayerId, SimulId, TourId } import lila.core.userId.UserId -import lila.core.game.Game -import lila.core.id.GameAnyId case class Abort(playerId: GamePlayerId) case class Berserk(gameId: GameId, userId: UserId) diff --git a/modules/core/src/main/security.scala b/modules/core/src/main/security.scala index 54a68f8445bc..5856c9876669 100644 --- a/modules/core/src/main/security.scala +++ b/modules/core/src/main/security.scala @@ -1,14 +1,13 @@ package lila.core package security +import play.api.data.{ Form, Mapping } import play.api.mvc.RequestHeader -import lila.core.user.User -import lila.core.net.IpAddress -import lila.core.userId.UserId -import play.api.data.{ Form, Mapping } import lila.core.email.EmailAddress -import lila.core.userId.UserName +import lila.core.net.IpAddress +import lila.core.user.User +import lila.core.userId.{ UserId, UserName } case class GarbageCollect(userId: UserId) case class CloseAccount(userId: UserId) diff --git a/modules/core/src/main/setup.scala b/modules/core/src/main/setup.scala index 9ca410182031..574e55cff3d0 100644 --- a/modules/core/src/main/setup.scala +++ b/modules/core/src/main/setup.scala @@ -1,10 +1,10 @@ package lila.core package setup -import _root_.chess.{ format, Clock } import _root_.chess.variant.Variant - +import _root_.chess.{ Clock, format } import scalalib.model.Days + import lila.core.game.GameRule import lila.core.userId.UserId diff --git a/modules/core/src/main/simul.scala b/modules/core/src/main/simul.scala index e43cee984a28..4046e200df2d 100644 --- a/modules/core/src/main/simul.scala +++ b/modules/core/src/main/simul.scala @@ -3,8 +3,8 @@ package simul import _root_.chess.variant.Variant +import lila.core.id.{ GameId, SimulId } import lila.core.rating.Score -import lila.core.id.{ SimulId, GameId } import lila.core.userId.UserId trait Simul: diff --git a/modules/core/src/main/socket.scala b/modules/core/src/main/socket.scala index f150c737540c..59739b89dc70 100644 --- a/modules/core/src/main/socket.scala +++ b/modules/core/src/main/socket.scala @@ -1,12 +1,12 @@ package lila.core package socket -import play.api.libs.json.* +import _root_.chess.{ Centis, Color } import alleycats.Zero -import _root_.chess.{ Color, Centis } +import play.api.libs.json.* -import lila.core.userId.UserId import lila.core.data.LazyFu +import lila.core.userId.UserId opaque type IsOnline = UserId => Boolean object IsOnline extends FunctionWrapper[IsOnline, UserId => Boolean] diff --git a/modules/core/src/main/swiss.scala b/modules/core/src/main/swiss.scala index 60ad514c59df..47496151c158 100644 --- a/modules/core/src/main/swiss.scala +++ b/modules/core/src/main/swiss.scala @@ -3,8 +3,8 @@ package swiss import reactivemongo.api.bson.Macros.Annotations.Key -import lila.core.id.SwissId import lila.core.chess.Rank +import lila.core.id.SwissId import lila.core.userId.UserId case class IdName(@Key("_id") id: SwissId, name: String) diff --git a/modules/core/src/main/team.scala b/modules/core/src/main/team.scala index a48c58204d33..7ac48a8f7ad1 100644 --- a/modules/core/src/main/team.scala +++ b/modules/core/src/main/team.scala @@ -2,9 +2,10 @@ package lila.core package team import reactivemongo.api.bson.Macros.Annotations.Key + import lila.core.data.Markdown +import lila.core.id.{ Flair, TeamId } import lila.core.userId.* -import lila.core.id.{ TeamId, Flair } trait TeamApi: def filterHideForum(ids: Iterable[TeamId]): Fu[Set[TeamId]] diff --git a/modules/core/src/main/timeline.scala b/modules/core/src/main/timeline.scala index 67919242ac2d..d1e13425a310 100644 --- a/modules/core/src/main/timeline.scala +++ b/modules/core/src/main/timeline.scala @@ -1,11 +1,11 @@ package lila.core package timeline +import lila.core.bus.WithChannel import lila.core.id.* +import lila.core.perf.PerfKey import lila.core.study.data.StudyName import lila.core.userId.UserId -import lila.core.perf.PerfKey -import lila.core.bus.WithChannel case class ReloadTimelines(userIds: List[UserId]) diff --git a/modules/core/src/main/tournament.scala b/modules/core/src/main/tournament.scala index e893e1672bdd..22d2f2d2bf23 100644 --- a/modules/core/src/main/tournament.scala +++ b/modules/core/src/main/tournament.scala @@ -3,8 +3,8 @@ package tournament import play.api.i18n.Lang -import lila.core.id.{ TourId, TourPlayerId } import lila.core.chess.Rank +import lila.core.id.{ TourId, TourPlayerId } import lila.core.userId.UserId enum Status(val id: Int): diff --git a/modules/core/src/main/user.scala b/modules/core/src/main/user.scala index 4566fcc78a67..76b40b029f12 100644 --- a/modules/core/src/main/user.scala +++ b/modules/core/src/main/user.scala @@ -1,21 +1,19 @@ package lila.core -import reactivemongo.api.bson.Macros.Annotations.Key -import reactivemongo.api.bson.{ BSONDocument, BSONDocumentHandler, BSONDocumentReader } -import reactivemongo.api.bson.collection.BSONCollection +import _root_.chess.{ ByColor, PlayerTitle } import play.api.i18n.Lang import play.api.libs.json.JsObject -import _root_.chess.{ ByColor, PlayerTitle } +import reactivemongo.api.bson.Macros.Annotations.Key +import reactivemongo.api.bson.collection.BSONCollection +import reactivemongo.api.bson.{ BSONDocument, BSONDocumentHandler, BSONDocumentReader } import scalalib.model.Days -import lila.core.perf.Perf -import lila.core.rating.data.{ IntRating, IntRatingDiff } -import lila.core.perf.{ PerfKey, UserPerfs, UserWithPerfs } -import lila.core.userId.* import lila.core.email.* import lila.core.id.Flair +import lila.core.perf.{ KeyedPerf, Perf, PerfKey, UserPerfs, UserWithPerfs } import lila.core.rating.Glicko -import lila.core.perf.KeyedPerf +import lila.core.rating.data.{ IntRating, IntRatingDiff } +import lila.core.userId.* object user: diff --git a/modules/db/src/main/Handlers.scala b/modules/db/src/main/Handlers.scala index 8b6281baefae..8b89970b98ca 100644 --- a/modules/db/src/main/Handlers.scala +++ b/modules/db/src/main/Handlers.scala @@ -7,9 +7,8 @@ import reactivemongo.api.bson.exceptions.TypeDoesNotMatchException import scala.util.{ Failure, NotGiven, Success, Try } import lila.common.Iso.{ *, given } -import lila.core.email.NormalizedEmailAddress -import lila.core.net.IpAddress import lila.core.data.Percent +import lila.core.net.IpAddress trait Handlers: diff --git a/modules/db/src/main/PaginatorAdapter.scala b/modules/db/src/main/PaginatorAdapter.scala index b477a628d123..a2b7ef7f4067 100644 --- a/modules/db/src/main/PaginatorAdapter.scala +++ b/modules/db/src/main/PaginatorAdapter.scala @@ -3,7 +3,6 @@ package paginator import reactivemongo.api.* import reactivemongo.api.bson.* - import scalalib.paginator.AdapterLike import dsl.* diff --git a/modules/evalCache/src/main/BSONHandlers.scala b/modules/evalCache/src/main/BSONHandlers.scala index dcde4a10ed72..627d85192d6c 100644 --- a/modules/evalCache/src/main/BSONHandlers.scala +++ b/modules/evalCache/src/main/BSONHandlers.scala @@ -6,7 +6,7 @@ import reactivemongo.api.bson.* import scala.util.{ Success, Try } import lila.db.dsl.{ *, given } -import lila.tree.{ CloudEval, Score, Moves, Pv } +import lila.tree.{ CloudEval, Moves, Pv, Score } private object BSONHandlers: diff --git a/modules/evalCache/src/main/EvalCacheApi.scala b/modules/evalCache/src/main/EvalCacheApi.scala index f8bcbf72c559..102747fbeb3d 100644 --- a/modules/evalCache/src/main/EvalCacheApi.scala +++ b/modules/evalCache/src/main/EvalCacheApi.scala @@ -4,10 +4,10 @@ import chess.format.Fen import chess.variant.Variant import play.api.libs.json.JsObject +import lila.core.chess.MultiPv import lila.db.AsyncCollFailingSilently import lila.db.dsl.{ *, given } import lila.tree.CloudEval -import lila.core.chess.MultiPv final class EvalCacheApi(coll: AsyncCollFailingSilently, cacheApi: lila.memo.CacheApi)(using Executor): diff --git a/modules/evalCache/src/main/EvalCacheEntry.scala b/modules/evalCache/src/main/EvalCacheEntry.scala index 46c77771d18c..4881b2dbdfda 100644 --- a/modules/evalCache/src/main/EvalCacheEntry.scala +++ b/modules/evalCache/src/main/EvalCacheEntry.scala @@ -1,11 +1,10 @@ package lila.evalCache import chess.format.{ BinaryFen, Fen } -import chess.{ FullMoveNumber, HalfMoveClock, Situation } -import chess.variant.{ Chess960, FromPosition, Standard, Variant } +import chess.variant.Variant -import lila.tree.CloudEval import lila.core.chess.MultiPv +import lila.tree.CloudEval case class EvalCacheEntry( nbMoves: Int, // multipv cannot be greater than number of legal moves diff --git a/modules/evaluation/src/main/PlayerAggregateAssessment.scala b/modules/evaluation/src/main/PlayerAggregateAssessment.scala index a70be940abd9..282e1a5f54eb 100644 --- a/modules/evaluation/src/main/PlayerAggregateAssessment.scala +++ b/modules/evaluation/src/main/PlayerAggregateAssessment.scala @@ -1,6 +1,7 @@ package lila.evaluation import scala.math.sqrt + import lila.core.perf.UserWithPerfs import lila.rating.UserPerfsExt.bestRating diff --git a/modules/evaluation/src/main/Statistics.scala b/modules/evaluation/src/main/Statistics.scala index fe36eba9f40a..7411984dd7c2 100644 --- a/modules/evaluation/src/main/Statistics.scala +++ b/modules/evaluation/src/main/Statistics.scala @@ -3,8 +3,6 @@ package lila.evaluation import chess.{ Centis, Stats } import scalalib.Maths -import lila.game.GameExt.computeMoveTimes - object Statistics: case class IntAvgSd(avg: Int, sd: Int): diff --git a/modules/event/src/main/EventApi.scala b/modules/event/src/main/EventApi.scala index 9cfc6161cced..291891a05294 100644 --- a/modules/event/src/main/EventApi.scala +++ b/modules/event/src/main/EventApi.scala @@ -1,6 +1,6 @@ package lila.event -import lila.db.dsl.{ *, given } import lila.core.i18n.Language +import lila.db.dsl.{ *, given } import lila.memo.CacheApi.* final class EventApi(coll: Coll, cacheApi: lila.memo.CacheApi, eventForm: EventForm)(using Executor): diff --git a/modules/event/src/main/EventForm.scala b/modules/event/src/main/EventForm.scala index 55f9d646b87b..836f1366d6fd 100644 --- a/modules/event/src/main/EventForm.scala +++ b/modules/event/src/main/EventForm.scala @@ -4,7 +4,7 @@ import play.api.data.* import play.api.data.Forms.* import lila.common.Form.{ PrettyDateTime, into, stringIn } -import lila.core.i18n.{ Language, LangList } +import lila.core.i18n.{ LangList, Language } final class EventForm(langList: LangList): diff --git a/modules/event/src/main/ui/EventUi.scala b/modules/event/src/main/ui/EventUi.scala index 7f9c502471a8..ba3f5f89a3e1 100644 --- a/modules/event/src/main/ui/EventUi.scala +++ b/modules/event/src/main/ui/EventUi.scala @@ -3,9 +3,10 @@ package ui import play.api.data.Form +import lila.common.MarkdownRender import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.common.MarkdownRender final class EventUi(helpers: Helpers)(modMenu: Context ?=> Frag)(using Executor): import helpers.{ *, given } diff --git a/modules/feed/src/main/Env.scala b/modules/feed/src/main/Env.scala index dc8d0a67fef1..e966276230bf 100644 --- a/modules/feed/src/main/Env.scala +++ b/modules/feed/src/main/Env.scala @@ -2,8 +2,8 @@ package lila.feed import com.softwaremill.macwire.* -import lila.core.lilaism.Lilaism.* import lila.core.config.CollName +import lila.core.lilaism.Lilaism.* @Module final class Env(cacheApi: lila.memo.CacheApi, db: lila.db.Db, flairApi: lila.core.user.FlairApi)(using diff --git a/modules/feed/src/main/FeedUi.scala b/modules/feed/src/main/FeedUi.scala index 3ce410d764d3..12f08614e055 100644 --- a/modules/feed/src/main/FeedUi.scala +++ b/modules/feed/src/main/FeedUi.scala @@ -1,10 +1,11 @@ package lila.feed package ui -import scalalib.paginator.Paginator import play.api.data.Form +import scalalib.paginator.Paginator import lila.ui.{ *, given } + import ScalatagsTemplate.{ *, given } final class FeedUi(helpers: Helpers, atomUi: AtomUi)( diff --git a/modules/fide/src/main/Env.scala b/modules/fide/src/main/Env.scala index 57d41c8c0aed..0414a60e52a7 100644 --- a/modules/fide/src/main/Env.scala +++ b/modules/fide/src/main/Env.scala @@ -4,8 +4,8 @@ import com.softwaremill.macwire.* import play.api.libs.ws.StandaloneWSClient import lila.core.config.CollName +import lila.core.fide as hub import lila.memo.CacheApi -import lila.core.{ fide as hub } @Module final class Env(db: lila.db.Db, cacheApi: CacheApi, ws: StandaloneWSClient)(using diff --git a/modules/fide/src/main/Federation.scala b/modules/fide/src/main/Federation.scala index bea25652fcd4..38c70cbbadbe 100644 --- a/modules/fide/src/main/Federation.scala +++ b/modules/fide/src/main/Federation.scala @@ -1,11 +1,9 @@ package lila.fide - -import chess.FideId import monocle.syntax.all.* import reactivemongo.api.bson.Macros.Annotations.Key -import lila.core.fide.FideTC import lila.core.fide.Federation.* +import lila.core.fide.FideTC case class Federation( @Key("_id") id: Id, diff --git a/modules/fide/src/main/FederationApi.scala b/modules/fide/src/main/FederationApi.scala index 911af1d2bd70..dd1f7e381f97 100644 --- a/modules/fide/src/main/FederationApi.scala +++ b/modules/fide/src/main/FederationApi.scala @@ -2,8 +2,6 @@ package lila.fide final class FederationApi(repo: FideRepo)(using Executor): - import Federation.* - export repo.federation.fetch def find(str: String): Fu[Option[Federation]] = diff --git a/modules/fide/src/main/FidePaginator.scala b/modules/fide/src/main/FidePaginator.scala index 0c47ca79d1ef..32bd85cf42df 100644 --- a/modules/fide/src/main/FidePaginator.scala +++ b/modules/fide/src/main/FidePaginator.scala @@ -1,8 +1,8 @@ package lila.fide import reactivemongo.api.* - import scalalib.paginator.{ AdapterLike, Paginator } + import lila.db.dsl.* import lila.db.paginator.{ Adapter, CachedAdapter } diff --git a/modules/fide/src/main/FidePlayer.scala b/modules/fide/src/main/FidePlayer.scala index 6e826314acb1..e77d6748bb39 100644 --- a/modules/fide/src/main/FidePlayer.scala +++ b/modules/fide/src/main/FidePlayer.scala @@ -4,6 +4,7 @@ import chess.{ FideId, PlayerName, PlayerTitle } import reactivemongo.api.bson.Macros.Annotations.Key import java.text.Normalizer + import lila.core.fide.{ FideTC, PlayerToken, Tokenize, diacritics } case class FidePlayer( diff --git a/modules/fide/src/main/FidePlayerApi.scala b/modules/fide/src/main/FidePlayerApi.scala index 4b5f3b51c595..80705f39153f 100644 --- a/modules/fide/src/main/FidePlayerApi.scala +++ b/modules/fide/src/main/FidePlayerApi.scala @@ -3,8 +3,8 @@ package lila.fide import chess.{ ByColor, FideId, PlayerName, PlayerTitle } import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } import lila.core.fide.Federation +import lila.db.dsl.{ *, given } final class FidePlayerApi(repo: FideRepo, cacheApi: lila.memo.CacheApi)(using Executor): diff --git a/modules/fide/src/main/FidePlayerSync.scala b/modules/fide/src/main/FidePlayerSync.scala index d46d7425db73..1c0eec86084e 100644 --- a/modules/fide/src/main/FidePlayerSync.scala +++ b/modules/fide/src/main/FidePlayerSync.scala @@ -2,15 +2,14 @@ package lila.fide import akka.stream.contrib.ZipInputStreamSource import akka.stream.scaladsl.* -import akka.util.ByteString import chess.{ FideId, PlayerName, PlayerTitle } import play.api.libs.ws.StandaloneWSClient import reactivemongo.api.bson.* import java.util.zip.ZipInputStream +import lila.core.fide.{ Federation, FideTC } import lila.db.dsl.{ *, given } -import lila.core.fide.{ FideTC, Federation } final private class FidePlayerSync(repo: FideRepo, ws: StandaloneWSClient)(using Executor, diff --git a/modules/fide/src/main/FideRepo.scala b/modules/fide/src/main/FideRepo.scala index f05e355c8148..9952775dd893 100644 --- a/modules/fide/src/main/FideRepo.scala +++ b/modules/fide/src/main/FideRepo.scala @@ -3,8 +3,8 @@ package lila.fide import chess.FideId import reactivemongo.api.bson.* +import lila.core.fide as hub import lila.db.dsl.{ *, given } -import lila.core.{ fide as hub } final private class FideRepo( private[fide] val playerColl: Coll, diff --git a/modules/fide/src/main/ui/FideUi.scala b/modules/fide/src/main/ui/FideUi.scala index 43089bd9c4e5..5b2add5e398a 100644 --- a/modules/fide/src/main/ui/FideUi.scala +++ b/modules/fide/src/main/ui/FideUi.scala @@ -3,9 +3,10 @@ package ui import scalalib.paginator.Paginator +import lila.core.fide.FideTC import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.fide.FideTC final class FideUi(helpers: Helpers)(menu: String => Context ?=> Frag): import helpers.{ *, given } diff --git a/modules/fishnet/src/main/Analyser.scala b/modules/fishnet/src/main/Analyser.scala index b26ca27110a9..3e452cede092 100644 --- a/modules/fishnet/src/main/Analyser.scala +++ b/modules/fishnet/src/main/Analyser.scala @@ -4,8 +4,8 @@ import chess.Ply import scalalib.actor.AsyncActorSequencer import lila.analyse.AnalysisRepo -import lila.fishnet.Work.{ Origin, Sender } import lila.core.id +import lila.fishnet.Work.{ Origin, Sender } final class Analyser( repo: FishnetRepo, diff --git a/modules/fishnet/src/main/Env.scala b/modules/fishnet/src/main/Env.scala index 1467294b9b6c..939deb40e49a 100644 --- a/modules/fishnet/src/main/Env.scala +++ b/modules/fishnet/src/main/Env.scala @@ -9,7 +9,6 @@ import play.api.libs.ws.StandaloneWSClient import lila.common.Bus import lila.common.autoconfig.{ *, given } -import lila.common.config.* import lila.core.config.* @Module diff --git a/modules/fishnet/src/main/FishnetApi.scala b/modules/fishnet/src/main/FishnetApi.scala index 92392af79028..1aeffdc41bd1 100644 --- a/modules/fishnet/src/main/FishnetApi.scala +++ b/modules/fishnet/src/main/FishnetApi.scala @@ -1,11 +1,10 @@ package lila.fishnet import reactivemongo.api.bson.* +import scalalib.actor.AsyncActorSequencer import scala.util.{ Failure, Success, Try } -import scalalib.actor.AsyncActorSequencer - import lila.core.lilaism.LilaNoStackTrace import lila.core.net.IpAddress import lila.db.dsl.{ *, given } diff --git a/modules/fishnet/src/main/FishnetEvalCache.scala b/modules/fishnet/src/main/FishnetEvalCache.scala index 34664525a0fc..384e22e28c3a 100644 --- a/modules/fishnet/src/main/FishnetEvalCache.scala +++ b/modules/fishnet/src/main/FishnetEvalCache.scala @@ -1,6 +1,7 @@ package lila.fishnet import chess.format.Fen + import lila.tree.CloudEval import JsonApi.Request.Evaluation diff --git a/modules/fishnet/src/main/FishnetOpeningBook.scala b/modules/fishnet/src/main/FishnetOpeningBook.scala index 18ea3952f25a..39bba5d13595 100644 --- a/modules/fishnet/src/main/FishnetOpeningBook.scala +++ b/modules/fishnet/src/main/FishnetOpeningBook.scala @@ -3,10 +3,10 @@ package lila.fishnet import chess.format.{ Fen, Uci } import chess.{ Color, Speed } import com.softwaremill.tagging.* -import scalalib.ThreadLocalRandom import play.api.libs.json.* import play.api.libs.ws.JsonBodyReadables.* import play.api.libs.ws.StandaloneWSClient +import scalalib.ThreadLocalRandom import lila.common.Json.given import lila.memo.SettingStore diff --git a/modules/fishnet/src/main/JsonApi.scala b/modules/fishnet/src/main/JsonApi.scala index e65d52f5e3f4..fb6211b423bd 100644 --- a/modules/fishnet/src/main/JsonApi.scala +++ b/modules/fishnet/src/main/JsonApi.scala @@ -5,8 +5,8 @@ import chess.variant.Variant import play.api.libs.json.* import lila.common.Json.{ *, given } -import lila.core.net.IpAddress import lila.core.chess.Depth +import lila.core.net.IpAddress import lila.fishnet.Work as W import lila.tree.Eval.{ Cp, Mate } diff --git a/modules/fishnet/src/test/AnnotatorTest.scala b/modules/fishnet/src/test/AnnotatorTest.scala index 4e76c98ef5a9..ea95e42fbc0e 100644 --- a/modules/fishnet/src/test/AnnotatorTest.scala +++ b/modules/fishnet/src/test/AnnotatorTest.scala @@ -1,22 +1,19 @@ package lila.fishnet - -import chess.MoveOrDrop.* -import chess.format.pgn.{ InitialComments, Move, Parser, Pgn, PgnStr, SanStr, Tags } -import chess.variant.Standard -import chess.{ ByColor, Clock, MoveOrDrop, Ply, Situation } +import chess.format.FullFen +import chess.format.pgn.{ Parser, Pgn, PgnStr, SanStr, Tags } +import chess.variant.{ Standard, Variant } +import chess.{ ByColor, Ply } import play.api.libs.json.Json import java.time.Instant -import lila.analyse.{ Analysis, Annotator } +import lila.analyse.Annotator import lila.core.config.NetDomain +import lila.core.game.Player +import lila.core.id.GamePlayerId import JsonApi.* import readers.given -import lila.core.game.Player -import lila.core.id.GamePlayerId -import chess.format.FullFen -import chess.variant.Variant final class AnnotatorTest extends munit.FunSuite: diff --git a/modules/fishnet/src/test/TreeBuilderTest.scala b/modules/fishnet/src/test/TreeBuilderTest.scala index 77814b93cb76..e7bc403a287e 100644 --- a/modules/fishnet/src/test/TreeBuilderTest.scala +++ b/modules/fishnet/src/test/TreeBuilderTest.scala @@ -1,28 +1,30 @@ package lila.fishnet -import monocle.syntax.all.* -import chess.MoveOrDrop.* -import chess.format.pgn.{ InitialComments, Move, Parser, Pgn, PgnStr, SanStr, Tags } +import chess.ByColor +import chess.format.pgn.{ Parser, PgnStr, SanStr } import chess.variant.Standard -import chess.{ ByColor, Clock, MoveOrDrop, Ply, Situation } -import play.api.libs.json.Json - -import java.time.Instant +import monocle.syntax.all.* +import play.api.libs.json.JsValue import lila.analyse.{ Analysis, Annotator } import lila.core.config.NetDomain - -import JsonApi.* -import readers.given import lila.core.game.Player import lila.core.id.GamePlayerId -import chess.format.FullFen -import chess.variant.Variant - -import lila.tree.{ ExportOptions, TreeBuilder, NewTreeBuilder, NewRoot, Tree, Root, NewBranch } import lila.tree.Node.{ Comment, Comments } -import lila.tree.{ Branch, Branches, Node, NewTree } -import play.api.libs.json.JsValue +import lila.tree.{ + Branch, + Branches, + ExportOptions, + NewBranch, + NewRoot, + NewTree, + NewTreeBuilder, + Node, + Root, + TreeBuilder +} + +import JsonApi.* final class TreeBuilderTest extends munit.FunSuite: diff --git a/modules/forum/src/main/BSONHandlers.scala b/modules/forum/src/main/BSONHandlers.scala index 29929f290768..410ad2c180a2 100644 --- a/modules/forum/src/main/BSONHandlers.scala +++ b/modules/forum/src/main/BSONHandlers.scala @@ -1,10 +1,10 @@ package lila.forum import reactivemongo.api.bson.* - import scalalib.Iso -import lila.db.dsl.{ *, given } + import lila.core.forum.{ ForumPostMini, ForumTopicMini } +import lila.db.dsl.{ *, given } private object BSONHandlers: diff --git a/modules/forum/src/main/Env.scala b/modules/forum/src/main/Env.scala index 090609fd15f4..00f7cff0171a 100644 --- a/modules/forum/src/main/Env.scala +++ b/modules/forum/src/main/Env.scala @@ -6,9 +6,8 @@ import play.api.libs.ws.StandaloneWSClient import lila.common.autoconfig.{ *, given } import lila.core.config.* -import lila.core.relation.RelationApi - import lila.core.forum.ForumPostMiniView +import lila.core.relation.RelationApi @Module final private class ForumConfig( diff --git a/modules/forum/src/main/ForumAccess.scala b/modules/forum/src/main/ForumAccess.scala index a09ccedac6d7..02ea9ae0e264 100644 --- a/modules/forum/src/main/ForumAccess.scala +++ b/modules/forum/src/main/ForumAccess.scala @@ -1,8 +1,8 @@ package lila.forum +import lila.core.id.ForumCategId import lila.core.perm.Granter import lila.core.team.Access -import lila.core.id.ForumCategId final class ForumAccess( teamApi: lila.core.team.TeamApi, diff --git a/modules/forum/src/main/ForumCategApi.scala b/modules/forum/src/main/ForumCategApi.scala index 496d400f9766..b55b9b86cc88 100644 --- a/modules/forum/src/main/ForumCategApi.scala +++ b/modules/forum/src/main/ForumCategApi.scala @@ -1,6 +1,7 @@ package lila.forum import scalalib.paginator.* + import lila.db.dsl.{ *, given } final class ForumCategApi( diff --git a/modules/forum/src/main/ForumDelete.scala b/modules/forum/src/main/ForumDelete.scala index 0d508311e8db..95536502727a 100644 --- a/modules/forum/src/main/ForumDelete.scala +++ b/modules/forum/src/main/ForumDelete.scala @@ -2,9 +2,9 @@ package lila.forum import akka.stream.scaladsl.* -import lila.core.perm.Granter as MasterGranter -import lila.core.forum.BusForum import lila.common.Bus +import lila.core.forum.BusForum +import lila.core.perm.Granter as MasterGranter final class ForumDelete( postRepo: ForumPostRepo, diff --git a/modules/forum/src/main/ForumForm.scala b/modules/forum/src/main/ForumForm.scala index 3b35386e3977..d287f0f0b794 100644 --- a/modules/forum/src/main/ForumForm.scala +++ b/modules/forum/src/main/ForumForm.scala @@ -3,8 +3,8 @@ package lila.forum import play.api.data.* import play.api.data.Forms.* -import lila.common.Form.{ cleanText, into } import lila.common.Form.given +import lila.common.Form.{ cleanText, into } final private[forum] class ForumForm( promotion: lila.core.security.PromotionApi, diff --git a/modules/forum/src/main/ForumPaginator.scala b/modules/forum/src/main/ForumPaginator.scala index c960b73357db..40bca299ed7c 100644 --- a/modules/forum/src/main/ForumPaginator.scala +++ b/modules/forum/src/main/ForumPaginator.scala @@ -1,10 +1,10 @@ package lila.forum import scalalib.paginator.* -import lila.db.dsl.{ *, given } -import lila.db.paginator.Adapter import lila.core.config.NetDomain +import lila.db.dsl.* +import lila.db.paginator.Adapter final class ForumPaginator( topicRepo: ForumTopicRepo, diff --git a/modules/forum/src/main/ForumPost.scala b/modules/forum/src/main/ForumPost.scala index 652e5a67419f..fc837817a600 100644 --- a/modules/forum/src/main/ForumPost.scala +++ b/modules/forum/src/main/ForumPost.scala @@ -1,11 +1,10 @@ package lila.forum -import scalalib.ThreadLocalRandom import reactivemongo.api.bson.Macros.Annotations.Key - -import lila.core.perm.Granter +import scalalib.ThreadLocalRandom import lila.core.forum.ForumPostMini +import lila.core.perm.Granter case class OldVersion(text: String, createdAt: Instant) diff --git a/modules/forum/src/main/ForumPostApi.scala b/modules/forum/src/main/ForumPostApi.scala index 6a30f8a235d1..b5cc3f481fea 100644 --- a/modules/forum/src/main/ForumPostApi.scala +++ b/modules/forum/src/main/ForumPostApi.scala @@ -1,12 +1,11 @@ package lila.forum import lila.common.Bus -import lila.db.dsl.{ *, given } -import lila.core.shutup.{ ShutupApi, PublicSource } -import lila.core.timeline.{ ForumPost as TimelinePost, Propagate } +import lila.core.forum.{ BusForum, ForumCateg as _, ForumPost as _, * } import lila.core.perm.Granter as MasterGranter -import lila.core.forum.{ ForumPost as _, ForumCateg as _, * } -import lila.core.forum.BusForum +import lila.core.shutup.{ PublicSource, ShutupApi } +import lila.core.timeline.{ ForumPost as TimelinePost, Propagate } +import lila.db.dsl.{ *, given } final class ForumPostApi( postRepo: ForumPostRepo, diff --git a/modules/forum/src/main/ForumPostRepo.scala b/modules/forum/src/main/ForumPostRepo.scala index 8317234e71ff..27fcc19ef52c 100644 --- a/modules/forum/src/main/ForumPostRepo.scala +++ b/modules/forum/src/main/ForumPostRepo.scala @@ -2,11 +2,9 @@ package lila.forum import reactivemongo.akkastream.{ AkkaStreamCursor, cursorProducer } +import lila.core.forum.ForumPostMini import lila.db.dsl.{ *, given } - import lila.forum.Filter.* -import lila.core.forum.ForumPostMini -import reactivemongo.api.CursorOps final class ForumPostRepo(val coll: Coll, filter: Filter = Safe)(using Executor): diff --git a/modules/forum/src/main/ForumTopic.scala b/modules/forum/src/main/ForumTopic.scala index ab1cc33d8dc5..d5c20e977195 100644 --- a/modules/forum/src/main/ForumTopic.scala +++ b/modules/forum/src/main/ForumTopic.scala @@ -1,7 +1,7 @@ package lila.forum -import scalalib.ThreadLocalRandom import reactivemongo.api.bson.Macros.Annotations.Key +import scalalib.ThreadLocalRandom case class ForumTopic( @Key("_id") id: ForumTopicId, diff --git a/modules/forum/src/main/ForumTopicApi.scala b/modules/forum/src/main/ForumTopicApi.scala index 5fe7245bcecb..aa6317ca4c77 100644 --- a/modules/forum/src/main/ForumTopicApi.scala +++ b/modules/forum/src/main/ForumTopicApi.scala @@ -1,16 +1,16 @@ package lila.forum +import scalalib.paginator.* + import lila.common.Bus import lila.common.String.noShouting import lila.core.config.NetDomain -import scalalib.paginator.* -import lila.db.dsl.{ *, given } -import lila.core.shutup.{ ShutupApi, PublicSource } -import lila.core.timeline.{ ForumPost as TimelinePost, Propagate } import lila.core.forum.BusForum.CreatePost -import lila.memo.CacheApi -import lila.mon.forum.topic import lila.core.perm.Granter as MasterGranter +import lila.core.shutup.{ PublicSource, ShutupApi } +import lila.core.timeline.{ ForumPost as TimelinePost, Propagate } +import lila.db.dsl.{ *, given } +import lila.memo.CacheApi final private class ForumTopicApi( postRepo: ForumPostRepo, diff --git a/modules/forum/src/main/ForumTopicRepo.scala b/modules/forum/src/main/ForumTopicRepo.scala index 930c2c4d233e..2eda078197d8 100644 --- a/modules/forum/src/main/ForumTopicRepo.scala +++ b/modules/forum/src/main/ForumTopicRepo.scala @@ -1,9 +1,9 @@ package lila.forum +import lila.core.forum.ForumTopicMini import lila.db.dsl.{ *, given } import Filter.* -import lila.core.forum.ForumTopicMini final private class ForumTopicRepo(val coll: Coll, filter: Filter = Safe)(using Executor diff --git a/modules/forum/src/main/ui/CategUi.scala b/modules/forum/src/main/ui/CategUi.scala index 2e5f8d65e37f..ab440b680841 100644 --- a/modules/forum/src/main/ui/CategUi.scala +++ b/modules/forum/src/main/ui/CategUi.scala @@ -1,9 +1,11 @@ package lila.forum package ui +import scalalib.paginator.Paginator + import lila.ui.* + import ScalatagsTemplate.{ *, given } -import scalalib.paginator.Paginator final class CategUi(helpers: Helpers, bits: ForumBits): import helpers.{ *, given } @@ -142,7 +144,7 @@ final class CategUi(helpers: Helpers, bits: ForumBits): categ: lila.forum.ForumCateg, posts: Paginator[PostView] )(using Context) = - val pager = paginationByQuery(routes.ForumCateg.modFeed(categ.id, 1), posts, showPost = true) + paginationByQuery(routes.ForumCateg.modFeed(categ.id, 1), posts, showPost = true) Page(categ.name) .css("bits.forum") .csp(_.withInlineIconFont) diff --git a/modules/forum/src/main/ui/ForumBits.scala b/modules/forum/src/main/ui/ForumBits.scala index e371bca45695..eedabd2fa732 100644 --- a/modules/forum/src/main/ui/ForumBits.scala +++ b/modules/forum/src/main/ui/ForumBits.scala @@ -2,6 +2,7 @@ package lila.forum package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } final class ForumBits(helpers: Helpers): diff --git a/modules/forum/src/main/ui/PostUi.scala b/modules/forum/src/main/ui/PostUi.scala index fb74bba9933d..64281d585de2 100644 --- a/modules/forum/src/main/ui/PostUi.scala +++ b/modules/forum/src/main/ui/PostUi.scala @@ -4,6 +4,7 @@ package ui import scalalib.paginator.Paginator import lila.ui.* + import ScalatagsTemplate.{ *, given } final class PostUi(helpers: Helpers, bits: ForumBits): diff --git a/modules/forum/src/main/ui/TopicUi.scala b/modules/forum/src/main/ui/TopicUi.scala index 7587668bcf3b..c1e1d6a6a5e9 100644 --- a/modules/forum/src/main/ui/TopicUi.scala +++ b/modules/forum/src/main/ui/TopicUi.scala @@ -1,14 +1,15 @@ package lila.forum package ui -import play.api.data.{ Form, Field } +import play.api.data.{ Field, Form } import play.api.libs.json.Json import scalalib.paginator.Paginator -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.captcha.Captcha import lila.core.id.CmsPageKey +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class TopicUi(helpers: Helpers, bits: ForumBits, postUi: PostUi)( renderCaptcha: (Form[?] | Field, Captcha) => Context ?=> Frag, diff --git a/modules/forumSearch/src/main/Env.scala b/modules/forumSearch/src/main/Env.scala index 9cf51e151072..be9fd63d9e0f 100644 --- a/modules/forumSearch/src/main/Env.scala +++ b/modules/forumSearch/src/main/Env.scala @@ -4,12 +4,13 @@ import com.softwaremill.macwire.* import play.api.Configuration import lila.common.autoconfig.{ *, given } -import lila.core.forum.BusForum -import BusForum.* import lila.core.config.ConfigName +import lila.core.forum.BusForum import lila.search.client.SearchClient import lila.search.spec.Query +import BusForum.* + @Module private class ForumSearchConfig(@ConfigName("paginator.max_per_page") val maxPerPage: MaxPerPage) diff --git a/modules/forumSearch/src/main/ForumSearchApi.scala b/modules/forumSearch/src/main/ForumSearchApi.scala index 576109be9b22..5174a4a9f982 100644 --- a/modules/forumSearch/src/main/ForumSearchApi.scala +++ b/modules/forumSearch/src/main/ForumSearchApi.scala @@ -1,9 +1,9 @@ package lila.forumSearch -import lila.search.* import lila.core.id.ForumPostId +import lila.search.* import lila.search.client.SearchClient -import lila.search.spec.{ ForumSource, Query } +import lila.search.spec.Query final class ForumSearchApi(client: SearchClient)(using Executor) extends SearchReadApi[ForumPostId, Query.Forum]: diff --git a/modules/game/src/main/BSONHandlers.scala b/modules/game/src/main/BSONHandlers.scala index 5adf41d1727a..899967c36a5e 100644 --- a/modules/game/src/main/BSONHandlers.scala +++ b/modules/game/src/main/BSONHandlers.scala @@ -17,24 +17,24 @@ import chess.{ UnmovedRooks } import reactivemongo.api.bson.* +import scalalib.model.Days import scala.util.{ Success, Try } -import scalalib.model.Days -import lila.db.BSON -import lila.db.dsl.{ *, given } import lila.core.game.{ + ClockHistory, Game, - GameRule, - LightGame, - Source, GameDrawOffers, GameMetadata, - PgnImport, + GameRule, + LightGame, LightPlayer, - ClockHistory, + PgnImport, + Source, emptyDrawOffers } +import lila.db.BSON +import lila.db.dsl.{ *, given } object BSONHandlers: diff --git a/modules/game/src/main/BinaryFormat.scala b/modules/game/src/main/BinaryFormat.scala index babbff6f4de3..2fbb74dad0f6 100644 --- a/modules/game/src/main/BinaryFormat.scala +++ b/modules/game/src/main/BinaryFormat.scala @@ -8,8 +8,8 @@ import org.lichess.compression.clock.Encoder as ClockEncoder import scala.util.Try -import lila.db.ByteArray import lila.core.game.ClockHistory +import lila.db.ByteArray object BinaryFormat: diff --git a/modules/game/src/main/Blurs.scala b/modules/game/src/main/Blurs.scala index 2582aca3318d..217363b4859a 100644 --- a/modules/game/src/main/Blurs.scala +++ b/modules/game/src/main/Blurs.scala @@ -1,10 +1,11 @@ package lila.game import alleycats.Zero + import scala.util.Success import lila.core.game.Blurs -import lila.core.game.{ Blurs as apply } +import lila.core.game.Blurs as apply object Blurs: diff --git a/modules/game/src/main/CaptchaApi.scala b/modules/game/src/main/CaptchaApi.scala index 53839a77954a..98f3188a8477 100644 --- a/modules/game/src/main/CaptchaApi.scala +++ b/modules/game/src/main/CaptchaApi.scala @@ -1,14 +1,11 @@ package lila.game - -import akka.actor.* -import akka.pattern.pipe import chess.Game as ChessGame import chess.format.pgn.{ SanStr, Sans, Tags } -import chess.format.{ Fen, pgn, BoardFen } +import chess.format.{ BoardFen, Fen, pgn } + import scala.util.Success -import play.api.data.Form -import lila.core.captcha.{ Captcha, Solutions, WithCaptcha, CaptchaApi as ICaptchaApi } +import lila.core.captcha.{ Captcha, CaptchaApi as ICaptchaApi, Solutions, WithCaptcha } import lila.core.game.Game // only works with standard chess (not chess960) diff --git a/modules/game/src/main/CrosstableApi.scala b/modules/game/src/main/CrosstableApi.scala index c26b72f964da..2232c8c1fdc7 100644 --- a/modules/game/src/main/CrosstableApi.scala +++ b/modules/game/src/main/CrosstableApi.scala @@ -1,8 +1,8 @@ package lila.game +import lila.core.game.Game import lila.db.AsyncCollFailingSilently import lila.db.dsl.{ *, given } -import lila.core.game.Game final class CrosstableApi( coll: Coll, diff --git a/modules/game/src/main/Event.scala b/modules/game/src/main/Event.scala index ec83505b9673..f3e23ff1ea1e 100644 --- a/modules/game/src/main/Event.scala +++ b/modules/game/src/main/Event.scala @@ -20,7 +20,7 @@ import chess.{ import play.api.libs.json.* import lila.common.Json.given -import lila.core.game.{ Game, Event } +import lila.core.game.{ Event, Game } import JsonView.{ *, given } diff --git a/modules/game/src/main/Game.scala b/modules/game/src/main/Game.scala index f1f0d12175b0..710c68ce6f73 100644 --- a/modules/game/src/main/Game.scala +++ b/modules/game/src/main/Game.scala @@ -1,32 +1,28 @@ package lila.game -import scalalib.model.Days -import Color.{ Black, White } import chess.MoveOrDrop.{ color, fold } +import chess.format.Uci import chess.format.pgn.SanStr -import chess.format.{ Fen, Uci } -import chess.opening.{ Opening, OpeningDb } -import chess.variant.{ FromPosition, Standard, Variant } +import chess.variant.Variant import chess.{ ByColor, Castles, Centis, - CheckCount, Clock, Color, Game as ChessGame, Mode, MoveOrDrop, - Outcome, Ply, Speed, Status } +import scalalib.model.Days +import lila.core.game.{ ClockHistory, Game, Player, Pov } import lila.db.ByteArray -import lila.core.game.{ Pov, Game, Player, GameRule, Source, PgnImport, ClockHistory } -import lila.rating.PerfType import lila.game.Blurs.addAtMoveIndex +import lila.rating.PerfType object GameExt: diff --git a/modules/game/src/main/GameDiff.scala b/modules/game/src/main/GameDiff.scala index e52890c4ce2d..a19c1e76de0c 100644 --- a/modules/game/src/main/GameDiff.scala +++ b/modules/game/src/main/GameDiff.scala @@ -5,12 +5,10 @@ import reactivemongo.api.bson.* import scala.util.Try +import lila.core.game.{ Game, Player } import lila.db.ByteArray import lila.db.ByteArray.given import lila.db.dsl.given - -import lila.core.game.{ Game, Player } - import lila.game.Game.BSONFields.* object GameDiff: diff --git a/modules/game/src/main/GameRepo.scala b/modules/game/src/main/GameRepo.scala index 36a0c7f88323..1cc9e0722d43 100644 --- a/modules/game/src/main/GameRepo.scala +++ b/modules/game/src/main/GameRepo.scala @@ -1,17 +1,17 @@ package lila.game import chess.format.Fen -import chess.format.pgn.{ PgnStr, SanStr } -import chess.{ Color, ByColor, Status } -import scalalib.ThreadLocalRandom +import chess.format.pgn.SanStr +import chess.{ ByColor, Color, Status } import reactivemongo.akkastream.{ AkkaStreamCursor, cursorProducer } import reactivemongo.api.bson.* import reactivemongo.api.commands.WriteResult import reactivemongo.api.{ Cursor, WriteConcern } +import scalalib.ThreadLocalRandom +import lila.core.game.* import lila.db.dsl.{ *, given } import lila.db.isDuplicateKey -import lila.core.game.* import lila.game.GameExt.* final class GameRepo(c: Coll)(using Executor) extends lila.core.game.GameRepo(c): diff --git a/modules/game/src/main/GamesByUsersStream.scala b/modules/game/src/main/GamesByUsersStream.scala index ab3997cbef3d..718b8e0b20fe 100644 --- a/modules/game/src/main/GamesByUsersStream.scala +++ b/modules/game/src/main/GamesByUsersStream.scala @@ -5,10 +5,9 @@ import play.api.libs.json.* import lila.common.Bus import lila.common.Json.given +import lila.core.game.{ FinishGame, Game, StartGame, WithInitialFen } import lila.db.dsl.given -import lila.core.game.{ Game, WithInitialFen, FinishGame, StartGame } - final class GamesByUsersStream(gameRepo: lila.game.GameRepo)(using akka.stream.Materializer, Executor): private val chans = List("startGame", "finishGame") diff --git a/modules/game/src/main/IdGenerator.scala b/modules/game/src/main/IdGenerator.scala index 1af0589caa74..1bb2b4f6f8e1 100644 --- a/modules/game/src/main/IdGenerator.scala +++ b/modules/game/src/main/IdGenerator.scala @@ -1,14 +1,13 @@ package lila.game -import scalalib.{ SecureRandom, ThreadLocalRandom } +import scalalib.SecureRandom -import lila.db.dsl.{ *, given } -import lila.core.id.GameId import lila.core.game.{ Game, NewGame } +import lila.core.id.GameId +import lila.db.dsl.{ *, given } final class IdGenerator(gameRepo: GameRepo)(using Executor) extends lila.core.game.IdGenerator: - import IdGenerator.* import lila.core.game.IdGenerator.* def game: Fu[GameId] = diff --git a/modules/game/src/main/Importer.scala b/modules/game/src/main/Importer.scala index 26a7755ffad6..8d7bfe60171c 100644 --- a/modules/game/src/main/Importer.scala +++ b/modules/game/src/main/Importer.scala @@ -1,17 +1,15 @@ package lila.game package importer +import chess.format.pgn.PgnStr +import chess.{ ByColor, ErrorStr, Mode } import play.api.data.* import play.api.data.Forms.* -import chess.format.Fen -import chess.format.pgn.{ ParsedPgn, Parser, PgnStr, Reader, Sans } -import chess.{ ByColor, Color, ErrorStr, Mode, Outcome, Replay, Status } - +import lila.common.Form.into +import lila.core.game.{ Game, ImportedGame } import lila.game.GameExt.finish -import lila.core.game.{ ImportedGame, Game, Player } import lila.tree.ImportResult -import lila.common.Form.into private val maxPlies = 600 diff --git a/modules/game/src/main/JsonView.scala b/modules/game/src/main/JsonView.scala index 05c2912856ca..12e3db7332b5 100644 --- a/modules/game/src/main/JsonView.scala +++ b/modules/game/src/main/JsonView.scala @@ -6,7 +6,7 @@ import play.api.libs.json.* import lila.common.Json.{ *, given } import lila.core.LightUser -import lila.core.game.{ Game, Pov, Player, Source, Blurs } +import lila.core.game.{ Blurs, Game, Player, Pov, Source } final class JsonView(rematches: Rematches): diff --git a/modules/game/src/main/LightGame.scala b/modules/game/src/main/LightGame.scala index dcb5d167010b..ef6ab6bb6e04 100644 --- a/modules/game/src/main/LightGame.scala +++ b/modules/game/src/main/LightGame.scala @@ -1,8 +1,8 @@ package lila.game -import chess.{ Color, Status } +import chess.Color -import lila.core.game.{ LightGame, LightPlayer } +import lila.core.game.LightPlayer object LightGame: diff --git a/modules/game/src/main/Metadata.scala b/modules/game/src/main/Metadata.scala index 95bb4f05379f..49949c944c1e 100644 --- a/modules/game/src/main/Metadata.scala +++ b/modules/game/src/main/Metadata.scala @@ -1,14 +1,10 @@ package lila.game import chess.format.pgn.PgnStr -import chess.{ Color, Ply } import java.nio.charset.StandardCharsets.UTF_8 import java.security.MessageDigest -import lila.db.ByteArray -import lila.core.game.{ Source, GameRule, GameMetadata, GameDrawOffers, PgnImport } - object PgnImport: def hash(pgn: PgnStr) = // ByteArray { diff --git a/modules/game/src/main/PaginatorBuilder.scala b/modules/game/src/main/PaginatorBuilder.scala index b713d0e12360..74f1afd81f21 100644 --- a/modules/game/src/main/PaginatorBuilder.scala +++ b/modules/game/src/main/PaginatorBuilder.scala @@ -2,9 +2,9 @@ package lila.game import scalalib.paginator.* +import lila.core.game.Game import lila.db.dsl.* import lila.db.paginator.* -import lila.core.game.Game final class PaginatorBuilder(gameRepo: GameRepo)(using Executor): diff --git a/modules/game/src/main/PgnDump.scala b/modules/game/src/main/PgnDump.scala index 2f01fd911f84..15739fb96cb1 100644 --- a/modules/game/src/main/PgnDump.scala +++ b/modules/game/src/main/PgnDump.scala @@ -6,11 +6,10 @@ import chess.{ ByColor, Centis, Color, Outcome, Ply, Tree } import lila.core.LightUser import lila.core.config.BaseUrl -import lila.core.i18n.Translate -import lila.core.game.{ Game, Player } import lila.core.game.PgnDump.WithFlags -import lila.game.Player.nameSplit +import lila.core.game.{ Game, Player } import lila.game.GameExt.perfType +import lila.game.Player.nameSplit final class PgnDump(baseUrl: BaseUrl, lightUserApi: lila.core.user.LightUserApiMinimal)(using Executor) extends lila.core.game.PgnDump: diff --git a/modules/game/src/main/Player.scala b/modules/game/src/main/Player.scala index e9c83d75db7b..c6d117c0c73d 100644 --- a/modules/game/src/main/Player.scala +++ b/modules/game/src/main/Player.scala @@ -1,10 +1,8 @@ package lila.game - -import cats.derived.* import chess.{ ByColor, Color, Elo, PlayerName, Ply } +import lila.core.game.{ Blurs, LightGame, Player } import lila.core.user.WithPerf -import lila.core.game.{ LightGame, Player, Blurs } import lila.game.Blurs.{ nonEmpty, given } object Player: diff --git a/modules/game/src/main/Pov.scala b/modules/game/src/main/Pov.scala index 1f8ac5798ae3..a052f14f95a8 100644 --- a/modules/game/src/main/Pov.scala +++ b/modules/game/src/main/Pov.scala @@ -4,8 +4,6 @@ import lila.core.game.* object Pov: - import lila.core.game.Pov.* - def list(game: Game): List[Pov] = game.players.mapList(lila.core.game.Pov(game, _)) private inline def orInf(inline i: Option[Int]) = i.getOrElse(Int.MaxValue) diff --git a/modules/game/src/main/UserGameApi.scala b/modules/game/src/main/UserGameApi.scala index a1d1ceace049..cfc2695b2796 100644 --- a/modules/game/src/main/UserGameApi.scala +++ b/modules/game/src/main/UserGameApi.scala @@ -5,8 +5,8 @@ import play.api.libs.json.* import scalalib.Json.given import scalalib.paginator.Paginator -import lila.core.game.Game import lila.common.Json.given +import lila.core.game.Game import lila.game.JsonView.given import lila.ui.Context diff --git a/modules/game/src/main/actorApi.scala b/modules/game/src/main/actorApi.scala index 20698b9d7f24..075b82d0e7c6 100644 --- a/modules/game/src/main/actorApi.scala +++ b/modules/game/src/main/actorApi.scala @@ -1,9 +1,7 @@ package lila.game package actorApi - -import chess.ByColor import chess.format.Fen -import lila.core.perf.UserWithPerfs + import lila.core.game.{ Game, Pov } case class MoveGameEvent( diff --git a/modules/game/src/main/package.scala b/modules/game/src/main/package.scala index 41816a567b72..18ea300c2ae9 100644 --- a/modules/game/src/main/package.scala +++ b/modules/game/src/main/package.scala @@ -1,7 +1,6 @@ package lila.game import alleycats.Zero -import chess.ByColor export lila.core.lilaism.Lilaism.{ Game as CoreGame, Pov as CorePov, *, given } export lila.common.extensions.* diff --git a/modules/game/src/main/ui/GameUi.scala b/modules/game/src/main/ui/GameUi.scala index 540ba2a43be8..ded5c48f4993 100644 --- a/modules/game/src/main/ui/GameUi.scala +++ b/modules/game/src/main/ui/GameUi.scala @@ -4,10 +4,11 @@ package ui import chess.format.Fen import chess.format.pgn.PgnStr -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.game.Game import lila.game.GameExt.* +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class GameUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/game/src/test/BinaryClockTest.scala b/modules/game/src/test/BinaryClockTest.scala index 1b125622d25c..c21678765e4a 100644 --- a/modules/game/src/test/BinaryClockTest.scala +++ b/modules/game/src/test/BinaryClockTest.scala @@ -1,8 +1,8 @@ package lila.game import chess.{ Centis, Clock, White } - import scalalib.Maths + import lila.db.ByteArray class BinaryClockTest extends munit.FunSuite: diff --git a/modules/game/src/test/EventTest.scala b/modules/game/src/test/EventTest.scala index b9cf4faf886a..37c8c9ee9112 100644 --- a/modules/game/src/test/EventTest.scala +++ b/modules/game/src/test/EventTest.scala @@ -1,10 +1,9 @@ package lila.game -import chess.* -import chess.bitboard.Bitboard - import cats.syntax.all.* +import chess.* import chess.CoreArbitraries.given +import chess.bitboard.Bitboard import org.scalacheck.Prop.{ forAll, propBoolean } import play.api.libs.json.* diff --git a/modules/gameSearch/src/main/Env.scala b/modules/gameSearch/src/main/Env.scala index 59f551ef77da..8a00f5ae1f0f 100644 --- a/modules/gameSearch/src/main/Env.scala +++ b/modules/gameSearch/src/main/Env.scala @@ -4,9 +4,9 @@ import com.softwaremill.macwire.* import play.api.Configuration import lila.common.autoconfig.{ *, given } +import lila.core.config.ConfigName import lila.core.game.{ FinishGame, InsertGame } import lila.search.* -import lila.core.config.ConfigName import lila.search.client.SearchClient import lila.search.spec.Query diff --git a/modules/gameSearch/src/main/FormHelpers.scala b/modules/gameSearch/src/main/FormHelpers.scala index 23d091e30522..37985c7a516c 100644 --- a/modules/gameSearch/src/main/FormHelpers.scala +++ b/modules/gameSearch/src/main/FormHelpers.scala @@ -1,8 +1,8 @@ package lila.gameSearch import chess.Status + import lila.core.rating.RatingRange -import lila.core.i18n.Translate object FormHelpers: diff --git a/modules/gameSearch/src/main/GameSearchApi.scala b/modules/gameSearch/src/main/GameSearchApi.scala index 6d7c8d194dc3..8c6483c61e98 100644 --- a/modules/gameSearch/src/main/GameSearchApi.scala +++ b/modules/gameSearch/src/main/GameSearchApi.scala @@ -1,8 +1,8 @@ package lila.gameSearch -import lila.search.{ SearchReadApi, From, Size } import lila.search.client.SearchClient import lila.search.spec.Query +import lila.search.{ From, SearchReadApi, Size } final class GameSearchApi( client: SearchClient, diff --git a/modules/gameSearch/src/main/GameSearchForm.scala b/modules/gameSearch/src/main/GameSearchForm.scala index cd1b62aca7cc..7e1450b951b5 100644 --- a/modules/gameSearch/src/main/GameSearchForm.scala +++ b/modules/gameSearch/src/main/GameSearchForm.scala @@ -3,12 +3,13 @@ package lila.gameSearch import chess.Mode import play.api.data.* import play.api.data.Forms.* +import smithy4s.Timestamp + import java.time.LocalDate import lila.common.Form.* import lila.core.i18n.Translate -import lila.search.spec.{ Sorting as SpecSorting, IntRange, DateRange, Query } -import smithy4s.Timestamp +import lila.search.spec.{ DateRange, IntRange, Query, Sorting as SpecSorting } final private[gameSearch] class GameSearchForm: diff --git a/modules/gameSearch/src/main/GameSearchUi.scala b/modules/gameSearch/src/main/GameSearchUi.scala index b85b2250b0d7..ba097c23b7d6 100644 --- a/modules/gameSearch/src/main/GameSearchUi.scala +++ b/modules/gameSearch/src/main/GameSearchUi.scala @@ -1,13 +1,15 @@ package lila.gameSearch package ui -import java.time.format.DateTimeFormatter import play.api.data.Form import scalalib.paginator.Paginator +import java.time.format.DateTimeFormatter + +import lila.core.i18n.Translate import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.i18n.Translate final class GameSearchUi(helpers: Helpers)( gameWidgets: Seq[Game] => Context ?=> Frag @@ -147,7 +149,7 @@ final class GameSearchUi(helpers: Helpers)( ) final class SearchForm(helpers: Helpers)(form: Form[?])(using Translate): - import helpers.{ *, given } + import helpers.* import trans.{ search as trs } private val dateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") diff --git a/modules/gameSearch/src/main/Sorting.scala b/modules/gameSearch/src/main/Sorting.scala index 18edb72d9564..5d5819d20a5d 100644 --- a/modules/gameSearch/src/main/Sorting.scala +++ b/modules/gameSearch/src/main/Sorting.scala @@ -1,8 +1,5 @@ package lila.gameSearch - -import play.api.i18n.Lang - -import lila.core.i18n.{ Translate, I18nKey as trans } +import lila.core.i18n.{ I18nKey as trans, Translate } case class Sorting(f: String, order: String) diff --git a/modules/gameSearch/src/main/UserGameSearch.scala b/modules/gameSearch/src/main/UserGameSearch.scala index bbc7fbef3e6d..6790b5ebfff3 100644 --- a/modules/gameSearch/src/main/UserGameSearch.scala +++ b/modules/gameSearch/src/main/UserGameSearch.scala @@ -3,6 +3,7 @@ package lila.gameSearch import play.api.data.FormBinding import play.api.i18n.Lang import play.api.mvc.Request + import lila.search.spec.Query final class UserGameSearch( diff --git a/modules/gameSearch/src/main/package.scala b/modules/gameSearch/src/main/package.scala index aa3c156c3b59..28b0bf007d18 100644 --- a/modules/gameSearch/src/main/package.scala +++ b/modules/gameSearch/src/main/package.scala @@ -1,6 +1,6 @@ package lila.gameSearch -import lila.search.spec.{ IntRange, DateRange } +import lila.search.spec.{ DateRange, IntRange } export lila.core.lilaism.Lilaism.{ *, given } export lila.common.extensions.* diff --git a/modules/gathering/src/main/Condition.scala b/modules/gathering/src/main/Condition.scala index 2fccb71bde69..ce90231d4ca2 100644 --- a/modules/gathering/src/main/Condition.scala +++ b/modules/gathering/src/main/Condition.scala @@ -1,10 +1,11 @@ package lila.gathering +import scalalib.model.Days + +import lila.core.LightUser.Me +import lila.core.i18n.{ I18nKey as trans, Translate } import lila.core.team.LightTeam.TeamName -import lila.core.i18n.{ Translate, I18nKey as trans } import lila.rating.PerfType -import lila.core.LightUser.Me -import scalalib.model.Days trait Condition: diff --git a/modules/gathering/src/main/ConditionForm.scala b/modules/gathering/src/main/ConditionForm.scala index c7258edffc44..fd8896023a30 100644 --- a/modules/gathering/src/main/ConditionForm.scala +++ b/modules/gathering/src/main/ConditionForm.scala @@ -5,8 +5,8 @@ import play.api.data.Mapping import scalalib.model.Days import lila.common.Form.{ *, given } -import lila.gathering.Condition.* import lila.core.team.LightTeam +import lila.gathering.Condition.* object ConditionForm: diff --git a/modules/gathering/src/main/ConditionHandlers.scala b/modules/gathering/src/main/ConditionHandlers.scala index 989f00d14ff6..178c95d980cb 100644 --- a/modules/gathering/src/main/ConditionHandlers.scala +++ b/modules/gathering/src/main/ConditionHandlers.scala @@ -1,12 +1,9 @@ package lila.gathering - -import play.api.i18n.Lang - import java.time.format.{ DateTimeFormatter, FormatStyle } +import lila.core.i18n.Translate import lila.gathering.Condition.* import lila.rating.PerfType -import lila.core.i18n.Translate object ConditionHandlers: diff --git a/modules/gathering/src/main/ui/GatheringUi.scala b/modules/gathering/src/main/ui/GatheringUi.scala index 5895998208f3..c8cdf6330955 100644 --- a/modules/gathering/src/main/ui/GatheringUi.scala +++ b/modules/gathering/src/main/ui/GatheringUi.scala @@ -1,9 +1,10 @@ package lila.gathering package ui +import lila.core.data.UserIds import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.data.UserIds final class GatheringUi(helpers: Helpers)(prizeTournamentMakers: () => UserIds): import helpers.{ *, given } @@ -56,7 +57,7 @@ final class GatheringUi(helpers: Helpers)(prizeTournamentMakers: () => UserIds): ) final class GatheringFormUi(helpers: Helpers): - import helpers.{ *, given } + import helpers.* import play.api.data.Field val titleBypass = frag("Titled players bypass this restriction.") diff --git a/modules/history/src/main/Env.scala b/modules/history/src/main/Env.scala index bd748e868815..7afbb035a3c9 100644 --- a/modules/history/src/main/Env.scala +++ b/modules/history/src/main/Env.scala @@ -4,9 +4,6 @@ import com.softwaremill.macwire.* import com.softwaremill.tagging.* import lila.core.config.CollName -import lila.core.user.WithPerf - -import scalalib.model.Days @Module final class Env( diff --git a/modules/history/src/main/HistoryApi.scala b/modules/history/src/main/HistoryApi.scala index 9258ee5f250e..b9ef1d694d8d 100644 --- a/modules/history/src/main/HistoryApi.scala +++ b/modules/history/src/main/HistoryApi.scala @@ -2,11 +2,11 @@ package lila.history import chess.Speed import reactivemongo.api.bson.* +import scalalib.model.Days +import lila.core.perf.UserPerfs import lila.db.AsyncCollFailingSilently import lila.db.dsl.{ *, given } -import scalalib.model.Days -import lila.core.perf.UserPerfs final class HistoryApi( withColl: AsyncCollFailingSilently, diff --git a/modules/history/src/main/RatingChartApi.scala b/modules/history/src/main/RatingChartApi.scala index b2b2921184c1..047c2176e213 100644 --- a/modules/history/src/main/RatingChartApi.scala +++ b/modules/history/src/main/RatingChartApi.scala @@ -1,10 +1,9 @@ package lila.history +import play.api.i18n.Lang import play.api.libs.json.* import lila.common.Json.given -import play.api.i18n.Lang - import lila.core.data.SafeJsonStr final class RatingChartApi( diff --git a/modules/i18n/src/main/I18nQuantity.scala b/modules/i18n/src/main/I18nQuantity.scala index 0b0a90cdda71..14482bf60c06 100644 --- a/modules/i18n/src/main/I18nQuantity.scala +++ b/modules/i18n/src/main/I18nQuantity.scala @@ -1,6 +1,7 @@ package lila.i18n import play.api.i18n.Lang + import lila.core.i18n.Language private enum I18nQuantity: diff --git a/modules/i18n/src/main/JsDump.scala b/modules/i18n/src/main/JsDump.scala index 0f86d3effe78..51a681ff3a44 100644 --- a/modules/i18n/src/main/JsDump.scala +++ b/modules/i18n/src/main/JsDump.scala @@ -1,7 +1,6 @@ package lila.i18n - -import play.api.i18n.Lang import play.api.libs.json.{ JsObject, JsString } + import lila.core.i18n.{ I18nKey, Translate } object JsDump extends lila.core.i18n.JsDump: diff --git a/modules/i18n/src/main/LangList.scala b/modules/i18n/src/main/LangList.scala index eb8415b5db7a..f7718cfedb4d 100644 --- a/modules/i18n/src/main/LangList.scala +++ b/modules/i18n/src/main/LangList.scala @@ -1,6 +1,7 @@ package lila.i18n import play.api.i18n.Lang + import lila.core.i18n.{ Language, fixJavaLanguage } object LangList extends lila.core.i18n.LangList: diff --git a/modules/i18n/src/main/LangPicker.scala b/modules/i18n/src/main/LangPicker.scala index 0ebc35e4c88b..73a4dab430fb 100644 --- a/modules/i18n/src/main/LangPicker.scala +++ b/modules/i18n/src/main/LangPicker.scala @@ -2,7 +2,8 @@ package lila.i18n import play.api.i18n.Lang import play.api.mvc.RequestHeader -import lila.core.i18n.{ defaultLang, Language, defaultLanguage, fixJavaLanguage } + +import lila.core.i18n.{ Language, defaultLang, defaultLanguage, fixJavaLanguage } object LangPicker extends lila.core.i18n.LangPicker: diff --git a/modules/i18n/src/main/Registry.scala b/modules/i18n/src/main/Registry.scala index 2540de86d5fd..6a7a3aac5cf2 100644 --- a/modules/i18n/src/main/Registry.scala +++ b/modules/i18n/src/main/Registry.scala @@ -8,8 +8,7 @@ import java.util.Map as JMap import scala.jdk.CollectionConverters.* import lila.common.Chronometer -import lila.core.i18n.I18nKey -import lila.core.i18n.defaultLang +import lila.core.i18n.{ I18nKey, defaultLang } object Registry: diff --git a/modules/i18n/src/main/Translator.scala b/modules/i18n/src/main/Translator.scala index a9db1e8b0fc1..21c9c28a23b9 100644 --- a/modules/i18n/src/main/Translator.scala +++ b/modules/i18n/src/main/Translator.scala @@ -4,7 +4,7 @@ import play.api.i18n.Lang import scalatags.Text.all.* import lila.common.String.html.escapeHtml -import lila.core.i18n.{ Translator, TranslatorFrag, TranslatorTxt, I18nKey, Translate } +import lila.core.i18n.{ I18nKey, Translate, Translator, TranslatorFrag, TranslatorTxt } object Translator extends Translator: diff --git a/modules/i18n/src/main/package.scala b/modules/i18n/src/main/package.scala index 6e947f7c2a0d..3e7d1f27f693 100644 --- a/modules/i18n/src/main/package.scala +++ b/modules/i18n/src/main/package.scala @@ -1,7 +1,6 @@ package lila.i18n import play.api.i18n.Lang -import lila.core.i18n.Language export lila.core.lilaism.Lilaism.{ *, given } export lila.common.extensions.* diff --git a/modules/i18n/src/test/TranslationTest.scala b/modules/i18n/src/test/TranslationTest.scala index ecf37a64f8de..a717d643c014 100644 --- a/modules/i18n/src/test/TranslationTest.scala +++ b/modules/i18n/src/test/TranslationTest.scala @@ -3,8 +3,8 @@ package lila.i18n import play.api.i18n.Lang import scala.jdk.CollectionConverters.* -import lila.core.i18n.I18nKey -import lila.core.i18n.defaultLang + +import lila.core.i18n.{ I18nKey, defaultLang } class TranslationTest extends munit.FunSuite: diff --git a/modules/insight/src/main/AggregationClusters.scala b/modules/insight/src/main/AggregationClusters.scala index 23e85703fb62..b7f43dcfe19f 100644 --- a/modules/insight/src/main/AggregationClusters.scala +++ b/modules/insight/src/main/AggregationClusters.scala @@ -2,7 +2,7 @@ package lila.insight import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } +import lila.db.dsl.* object AggregationClusters: diff --git a/modules/insight/src/main/AggregationPipeline.scala b/modules/insight/src/main/AggregationPipeline.scala index b42ae7ea276f..4af2f459f4ed 100644 --- a/modules/insight/src/main/AggregationPipeline.scala +++ b/modules/insight/src/main/AggregationPipeline.scala @@ -2,7 +2,6 @@ package lila.insight import reactivemongo.api.bson.* -import lila.common.config import lila.db.dsl.{ *, given } final private class AggregationPipeline(store: InsightStorage)(using diff --git a/modules/insight/src/main/InsightApi.scala b/modules/insight/src/main/InsightApi.scala index d13efe18aa86..145a6d5acebf 100644 --- a/modules/insight/src/main/InsightApi.scala +++ b/modules/insight/src/main/InsightApi.scala @@ -1,7 +1,8 @@ package lila.insight import scalalib.HeapSort.botN -import lila.game.{ GameRepo } + +import lila.game.GameRepo final class InsightApi( storage: InsightStorage, diff --git a/modules/insight/src/main/InsightDimension.scala b/modules/insight/src/main/InsightDimension.scala index 793ddf2e01fe..d3d9e6e33549 100644 --- a/modules/insight/src/main/InsightDimension.scala +++ b/modules/insight/src/main/InsightDimension.scala @@ -7,12 +7,12 @@ import reactivemongo.api.bson.* import lila.analyse.{ AccuracyPercent, WinPercent } import lila.common.Json.given import lila.common.{ LilaOpeningFamily, SimpleOpening } +import lila.core.i18n.Translate import lila.db.dsl.{ *, given } import lila.insight.BSONHandlers.given import lila.insight.InsightEntry.BSONFields as F import lila.rating.BSONHandlers.perfTypeIdHandler import lila.rating.PerfType -import lila.core.i18n.Translate enum InsightDimension[A]( val key: String, diff --git a/modules/insight/src/main/InsightEntry.scala b/modules/insight/src/main/InsightEntry.scala index a657f6bfdb5f..b615ad779f81 100644 --- a/modules/insight/src/main/InsightEntry.scala +++ b/modules/insight/src/main/InsightEntry.scala @@ -2,8 +2,6 @@ package lila.insight import lila.common.SimpleOpening -import lila.rating.PerfType - case class InsightEntry( id: String, // gameId + w/b userId: UserId, diff --git a/modules/insight/src/main/InsightIndexer.scala b/modules/insight/src/main/InsightIndexer.scala index 3db915b6401d..52d2fcfb279b 100644 --- a/modules/insight/src/main/InsightIndexer.scala +++ b/modules/insight/src/main/InsightIndexer.scala @@ -5,7 +5,6 @@ import reactivemongo.api.* import reactivemongo.api.bson.* import lila.common.LilaStream - import lila.db.dsl.{ *, given } import lila.game.{ GameRepo, Query } diff --git a/modules/insight/src/main/InsightPerfStatsApi.scala b/modules/insight/src/main/InsightPerfStatsApi.scala index 4c0066971fc8..838be9b0b821 100644 --- a/modules/insight/src/main/InsightPerfStatsApi.scala +++ b/modules/insight/src/main/InsightPerfStatsApi.scala @@ -3,9 +3,8 @@ package lila.insight import chess.{ ByColor, Centis } import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } - import lila.core.perf.PerfId +import lila.db.dsl.{ *, given } import lila.rating.PerfType case class InsightPerfStats( diff --git a/modules/insight/src/main/PovToEntry.scala b/modules/insight/src/main/PovToEntry.scala index d154b956f494..934fc4a22dc8 100644 --- a/modules/insight/src/main/PovToEntry.scala +++ b/modules/insight/src/main/PovToEntry.scala @@ -6,8 +6,6 @@ import chess.{ Centis, Clock, Ply, Role, Situation, Stats } import lila.analyse.{ AccuracyCP, AccuracyPercent, Advice, Analysis, WinPercent } import lila.common.SimpleOpening -import lila.game.GameExt.analysable -import lila.game.GameExt.computeMoveTimes import lila.game.Blurs.booleans case class RichPov( diff --git a/modules/irc/src/main/IrcApi.scala b/modules/irc/src/main/IrcApi.scala index 42a91fb2e8bf..795067a9fdb6 100644 --- a/modules/irc/src/main/IrcApi.scala +++ b/modules/irc/src/main/IrcApi.scala @@ -2,8 +2,8 @@ package lila.irc import lila.core.LightUser import lila.core.LightUser.Me.given -import lila.core.irc.* import lila.core.id.* +import lila.core.irc.* final class IrcApi( zulip: ZulipClient, diff --git a/modules/irwin/src/main/IrwinApi.scala b/modules/irwin/src/main/IrwinApi.scala index bb6fbaa83c0d..99842de7433a 100644 --- a/modules/irwin/src/main/IrwinApi.scala +++ b/modules/irwin/src/main/IrwinApi.scala @@ -4,11 +4,11 @@ import reactivemongo.api.bson.* import lila.analyse.{ Analysis, AnalysisRepo } import lila.common.Bus +import lila.core.report.SuspectId +import lila.core.userId.ModId import lila.db.dsl.{ *, given } import lila.game.{ GameRepo, Query } import lila.report.{ Mod, Report, Reporter, Suspect } -import lila.core.report.SuspectId -import lila.core.userId.ModId final class IrwinApi( reportColl: Coll, diff --git a/modules/irwin/src/main/IrwinRequest.scala b/modules/irwin/src/main/IrwinRequest.scala index b09c4a7beee1..26ce2811f756 100644 --- a/modules/irwin/src/main/IrwinRequest.scala +++ b/modules/irwin/src/main/IrwinRequest.scala @@ -1,7 +1,6 @@ package lila.irwin import lila.analyse.Analysis -import lila.game.Game import lila.report.Suspect case class IrwinRequest( diff --git a/modules/irwin/src/main/IrwinThresholds.scala b/modules/irwin/src/main/IrwinThresholds.scala index 9358b17327bb..95750feeb759 100644 --- a/modules/irwin/src/main/IrwinThresholds.scala +++ b/modules/irwin/src/main/IrwinThresholds.scala @@ -3,10 +3,10 @@ package lila.irwin import play.api.data.Form import play.api.data.Forms.{ single, text } import reactivemongo.api.bson.BSONHandler - import scalalib.Iso -import lila.memo.SettingStore.{ Formable, StringReader } + import lila.core.data.Ints +import lila.memo.SettingStore.{ Formable, StringReader } case class IrwinThresholds(report: Int, mark: Int) diff --git a/modules/irwin/src/main/IrwinUi.scala b/modules/irwin/src/main/IrwinUi.scala index 4dee984240c3..043c28e6df39 100644 --- a/modules/irwin/src/main/IrwinUi.scala +++ b/modules/irwin/src/main/IrwinUi.scala @@ -1,9 +1,10 @@ package lila.irwin -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.game.Pov import lila.game.GameExt.playerBlurPercent +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class IrwinUi(helpers: Helpers)(menu: String => Context ?=> Frag): import helpers.{ *, given } diff --git a/modules/irwin/src/main/KaladinApi.scala b/modules/irwin/src/main/KaladinApi.scala index 9901cc7bcd8f..1eba5b6439d2 100644 --- a/modules/irwin/src/main/KaladinApi.scala +++ b/modules/irwin/src/main/KaladinApi.scala @@ -4,14 +4,14 @@ import chess.Speed import reactivemongo.api.Cursor import reactivemongo.api.bson.* +import lila.core.perf.UserWithPerfs +import lila.core.report.SuspectId +import lila.core.userId.ModId import lila.db.AsyncColl import lila.db.dsl.{ *, given } import lila.game.{ BinaryFormat, GameRepo } import lila.memo.CacheApi import lila.report.{ Mod, Report, Reporter, Suspect } -import lila.core.report.SuspectId -import lila.core.userId.ModId -import lila.core.perf.UserWithPerfs final class KaladinApi( coll: AsyncColl, diff --git a/modules/irwin/src/main/KaladinUser.scala b/modules/irwin/src/main/KaladinUser.scala index 00653912c1e8..1a56c6345b3e 100644 --- a/modules/irwin/src/main/KaladinUser.scala +++ b/modules/irwin/src/main/KaladinUser.scala @@ -2,10 +2,10 @@ package lila.irwin import reactivemongo.api.bson.Macros.Annotations.Key -import lila.report.Suspect import lila.core.perf.PerfId -import lila.rating.PerfType import lila.core.report.SuspectId +import lila.rating.PerfType +import lila.report.Suspect case class KaladinUser( @Key("_id") id: UserId, diff --git a/modules/lobby/src/main/Biter.scala b/modules/lobby/src/main/Biter.scala index 531386aa2266..3722374bbd00 100644 --- a/modules/lobby/src/main/Biter.scala +++ b/modules/lobby/src/main/Biter.scala @@ -3,8 +3,7 @@ package lila.lobby import chess.{ ByColor, Game as ChessGame, Situation } import lila.core.socket.Sri -import lila.core.user.GameUsers -import lila.core.user.WithPerf +import lila.core.user.{ GameUsers, WithPerf } final private class Biter( userApi: lila.core.user.UserApi, diff --git a/modules/lobby/src/main/Env.scala b/modules/lobby/src/main/Env.scala index 8cdf6f9bc4ad..4fcddad344b8 100644 --- a/modules/lobby/src/main/Env.scala +++ b/modules/lobby/src/main/Env.scala @@ -2,10 +2,10 @@ package lila.lobby import com.softwaremill.macwire.* import play.api.Configuration +import scalalib.cache.ExpireSetMemo import lila.core.config.* import lila.core.pool.IsClockCompatible -import scalalib.cache.ExpireSetMemo @Module final class Env( diff --git a/modules/lobby/src/main/Hook.scala b/modules/lobby/src/main/Hook.scala index 005fec9fc0a2..2e7fa2185fb1 100644 --- a/modules/lobby/src/main/Hook.scala +++ b/modules/lobby/src/main/Hook.scala @@ -2,13 +2,13 @@ package lila.lobby import chess.variant.Variant import chess.{ Clock, Mode, Speed } -import scalalib.ThreadLocalRandom import play.api.libs.json.* +import scalalib.ThreadLocalRandom -import lila.rating.PerfType +import lila.core.perf.UserWithPerfs import lila.core.rating.RatingRange import lila.core.socket.Sri -import lila.core.perf.UserWithPerfs +import lila.rating.PerfType // realtime chess, volatile case class Hook( diff --git a/modules/lobby/src/main/HookRepo.scala b/modules/lobby/src/main/HookRepo.scala index 9f7f1021f858..b505ce4c4cc8 100644 --- a/modules/lobby/src/main/HookRepo.scala +++ b/modules/lobby/src/main/HookRepo.scala @@ -1,10 +1,11 @@ package lila.lobby +import scalalib.HeapSort + import scala.collection.View -import scalalib.HeapSort -import lila.core.socket.Sri import lila.core.pool.IsClockCompatible +import lila.core.socket.Sri // NOT thread safe. // control concurrency from LobbySyncActor diff --git a/modules/lobby/src/main/LobbySocket.scala b/modules/lobby/src/main/LobbySocket.scala index d1e202fec966..b915c9fe8572 100644 --- a/modules/lobby/src/main/LobbySocket.scala +++ b/modules/lobby/src/main/LobbySocket.scala @@ -1,15 +1,14 @@ package lila.lobby import play.api.libs.json.* +import scalalib.actor.SyncActor import lila.common.Json.given - -import scalalib.actor.SyncActor -import lila.core.timeline.* -import lila.rating.RatingRange import lila.core.game.ChangeFeatured -import lila.core.socket.{ protocol as P, * } import lila.core.pool.PoolConfigId +import lila.core.socket.{ protocol as P, * } +import lila.core.timeline.* +import lila.rating.RatingRange case class LobbyCounters(members: Int, rounds: Int) diff --git a/modules/lobby/src/main/LobbySyncActor.scala b/modules/lobby/src/main/LobbySyncActor.scala index c4e67e7d99d7..3ec1c07731cd 100644 --- a/modules/lobby/src/main/LobbySyncActor.scala +++ b/modules/lobby/src/main/LobbySyncActor.scala @@ -2,9 +2,9 @@ package lila.lobby import scalalib.actor.SyncActor -import lila.common.{ Bus, LilaScheduler } +import lila.common.Bus +import lila.core.pool.{ HookThieve, IsClockCompatible } import lila.core.socket.{ Sri, Sris } -import lila.core.pool.{ IsClockCompatible, HookThieve } final private class LobbySyncActor( seekApi: SeekApi, diff --git a/modules/lobby/src/main/LobbyUser.scala b/modules/lobby/src/main/LobbyUser.scala index 7dcddb3190e5..06617e3b3280 100644 --- a/modules/lobby/src/main/LobbyUser.scala +++ b/modules/lobby/src/main/LobbyUser.scala @@ -1,12 +1,9 @@ package lila.lobby +import lila.core.perf.{ UserPerfs, UserWithPerfs } import lila.core.pool.Blocking -import lila.rating.{ Glicko, Perf } - -import lila.rating.PerfType -import lila.core.perf.UserWithPerfs -import lila.core.perf.UserPerfs import lila.rating.UserPerfsExt.perfsList +import lila.rating.{ Glicko, PerfType } private[lobby] case class LobbyUser( id: UserId, diff --git a/modules/lobby/src/main/Seek.scala b/modules/lobby/src/main/Seek.scala index 1b33f9ba7f0e..43775fb4a8fe 100644 --- a/modules/lobby/src/main/Seek.scala +++ b/modules/lobby/src/main/Seek.scala @@ -2,15 +2,14 @@ package lila.lobby import chess.variant.Variant import chess.{ Mode, Speed } -import scalalib.ThreadLocalRandom import play.api.libs.json.* - +import scalalib.ThreadLocalRandom import scalalib.model.Days -import lila.common.Json.given -import lila.rating.{ Perf, PerfType } -import lila.core.rating.RatingRange +import lila.common.Json.given import lila.core.perf.UserWithPerfs +import lila.core.rating.RatingRange +import lila.rating.PerfType // correspondence chess, persistent case class Seek( diff --git a/modules/lobby/src/main/SeekApi.scala b/modules/lobby/src/main/SeekApi.scala index e8fa1bb8b563..4846710f3c7e 100644 --- a/modules/lobby/src/main/SeekApi.scala +++ b/modules/lobby/src/main/SeekApi.scala @@ -1,9 +1,7 @@ package lila.lobby - -import lila.common.config.* +import lila.core.perf.UserWithPerfs import lila.db.dsl.{ *, given } import lila.memo.CacheApi.* -import lila.core.perf.UserWithPerfs final class SeekApi( userApi: lila.core.user.UserApi, diff --git a/modules/mailer/src/main/AutomaticEmail.scala b/modules/mailer/src/main/AutomaticEmail.scala index bee5f0fddff0..3410bdbe5089 100644 --- a/modules/mailer/src/main/AutomaticEmail.scala +++ b/modules/mailer/src/main/AutomaticEmail.scala @@ -3,12 +3,12 @@ package lila.mailer import play.api.i18n.Lang import scalatags.Text.all.* -import lila.core.lilaism.LilaException import lila.core.config.BaseUrl +import lila.core.i18n.I18nKey.emails as trans +import lila.core.i18n.Translator +import lila.core.lilaism.LilaException import lila.core.misc.mailer.CorrespondenceOpponent import lila.core.msg.SystemMsg -import lila.core.i18n.Translator -import lila.core.i18n.I18nKey.emails as trans final class AutomaticEmail( userApi: lila.core.user.UserApi, diff --git a/modules/mailer/src/main/Env.scala b/modules/mailer/src/main/Env.scala index 11efcbae90a5..b04726d8f269 100644 --- a/modules/mailer/src/main/Env.scala +++ b/modules/mailer/src/main/Env.scala @@ -4,8 +4,8 @@ import akka.actor.* import com.softwaremill.macwire.* import play.api.Configuration -import lila.common.config.* import lila.common.Bus +import lila.common.config.* import lila.core.misc.mailer.CorrespondenceOpponents @Module diff --git a/modules/mailer/src/main/Mailer.scala b/modules/mailer/src/main/Mailer.scala index 88906b7541c6..dc439c59cee7 100644 --- a/modules/mailer/src/main/Mailer.scala +++ b/modules/mailer/src/main/Mailer.scala @@ -1,17 +1,17 @@ package lila.mailer import akka.actor.ActorSystem -import scalalib.ThreadLocalRandom import play.api.ConfigLoader import play.api.libs.mailer.{ Email, SMTPConfiguration, SMTPMailer } +import scalalib.ThreadLocalRandom import scalatags.Text.all.{ html as htmlTag, * } import scalatags.Text.tags2.title as titleTag import scala.concurrent.blocking +import lila.common.Chronometer import lila.common.String.html.nl2br import lila.common.autoconfig.* -import lila.common.Chronometer import lila.core.i18n.I18nKey.emails as trans import lila.core.i18n.Translate diff --git a/modules/memo/src/main/Env.scala b/modules/memo/src/main/Env.scala index ab572e985ae7..61bbaf26d72a 100644 --- a/modules/memo/src/main/Env.scala +++ b/modules/memo/src/main/Env.scala @@ -1,12 +1,12 @@ package lila.memo import com.softwaremill.macwire.* -import lila.common.autoconfig.{ *, given } import play.api.{ ConfigLoader, Configuration } -import lila.core.config.* import lila.common.autoconfig.* +import lila.common.autoconfig.given import lila.common.config.given +import lila.core.config.* final class MemoConfig( @ConfigName("collection.cache") val cacheColl: CollName, diff --git a/modules/memo/src/main/ExpirableCallbackMemo.scala b/modules/memo/src/main/ExpirableCallbackMemo.scala index e93bed8dd90e..070787ae88ab 100644 --- a/modules/memo/src/main/ExpirableCallbackMemo.scala +++ b/modules/memo/src/main/ExpirableCallbackMemo.scala @@ -1,6 +1,7 @@ package lila.memo import akka.actor.{ Cancellable, Scheduler } + import java.util.concurrent.ConcurrentHashMap import scala.jdk.CollectionConverters.* diff --git a/modules/memo/src/main/MongoCache.scala b/modules/memo/src/main/MongoCache.scala index 90f80e1c5504..5f5443d830a8 100644 --- a/modules/memo/src/main/MongoCache.scala +++ b/modules/memo/src/main/MongoCache.scala @@ -1,11 +1,12 @@ package lila.memo -import CacheApi.* import com.github.blemale.scaffeine.AsyncLoadingCache import reactivemongo.api.bson.* import lila.db.dsl.{ *, given } +import CacheApi.* + /** To avoid recomputing very expensive values after deploy */ final class MongoCache[K, V: BSONHandler] private ( diff --git a/modules/memo/src/main/Picfit.scala b/modules/memo/src/main/Picfit.scala index 5512f24a5e14..7d98e7740aa2 100644 --- a/modules/memo/src/main/Picfit.scala +++ b/modules/memo/src/main/Picfit.scala @@ -1,18 +1,18 @@ package lila.memo -import reactivemongo.api.bson.Macros.Annotations.Key -import reactivemongo.api.bson.{ BSONDocumentHandler, Macros } import akka.stream.scaladsl.{ FileIO, Source } import akka.util.ByteString import com.github.blemale.scaffeine.LoadingCache -import play.api.libs.ws.StandaloneWSClient import play.api.libs.ws.DefaultBodyReadables.* +import play.api.libs.ws.StandaloneWSClient import play.api.mvc.MultipartFormData +import reactivemongo.api.bson.Macros.Annotations.Key +import reactivemongo.api.bson.{ BSONDocumentHandler, Macros } import scalalib.ThreadLocalRandom -import lila.db.dsl.{ *, given } -import lila.core.net.IpAddress import lila.core.id.ImageId +import lila.core.net.IpAddress +import lila.db.dsl.{ *, given } case class PicfitImage( @Key("_id") id: ImageId, diff --git a/modules/memo/src/main/RateLimit.scala b/modules/memo/src/main/RateLimit.scala index 6e862f77a1c2..90beb34a6bcb 100644 --- a/modules/memo/src/main/RateLimit.scala +++ b/modules/memo/src/main/RateLimit.scala @@ -2,7 +2,7 @@ package lila.memo import alleycats.Zero -import lila.core.config.{ RateLimit as Enforce } +import lila.core.config.RateLimit as Enforce /** Throttler that allows X operations per Y unit of time Not thread safe */ diff --git a/modules/memo/src/main/SettingStore.scala b/modules/memo/src/main/SettingStore.scala index 422bca2363fa..6f5238393b0a 100644 --- a/modules/memo/src/main/SettingStore.scala +++ b/modules/memo/src/main/SettingStore.scala @@ -1,13 +1,16 @@ package lila.memo -import scala.util.matching.Regex -import scala.util.Try +import play.api.data.* import reactivemongo.api.bson.BSONHandler +import scalalib.Iso + +import scala.util.Try +import scala.util.matching.Regex -import lila.db.dsl.* -import play.api.data.*, Forms.* import lila.core.data.{ Ints, Strings, UserIds } -import scalalib.Iso +import lila.db.dsl.* + +import Forms.* final class SettingStore[A: BSONHandler: SettingStore.StringReader: SettingStore.Formable] private ( coll: Coll, diff --git a/modules/memo/src/main/Syncache.scala b/modules/memo/src/main/Syncache.scala index 2daac31e3fe8..16825f0cd694 100644 --- a/modules/memo/src/main/Syncache.scala +++ b/modules/memo/src/main/Syncache.scala @@ -1,6 +1,7 @@ package lila.memo import com.github.benmanes.caffeine.cache.* + import java.util.concurrent.TimeUnit import scala.util.Success diff --git a/modules/mod/src/main/AssessApi.scala b/modules/mod/src/main/AssessApi.scala index e982eb3ec498..c5dfb79e7de3 100644 --- a/modules/mod/src/main/AssessApi.scala +++ b/modules/mod/src/main/AssessApi.scala @@ -1,16 +1,15 @@ package lila.mod -import chess.{ Black, Color, White, ByColor } -import scalalib.ThreadLocalRandom +import chess.{ Black, ByColor, Color, White } import reactivemongo.api.bson.* +import scalalib.ThreadLocalRandom import lila.analyse.{ Analysis, AnalysisRepo } -import lila.db.dsl.{ *, given } -import lila.evaluation.{ AccountAction, PlayerAggregateAssessment, PlayerAssessment, Statistics } import lila.core.game.{ Player, Source } import lila.core.report.SuspectId +import lila.db.dsl.{ *, given } +import lila.evaluation.{ AccountAction, PlayerAggregateAssessment, PlayerAssessment, Statistics } import lila.game.GameExt.playerBlurPercent -import lila.game.GameExt.analysable final class AssessApi( assessRepo: AssessmentRepo, diff --git a/modules/mod/src/main/Env.scala b/modules/mod/src/main/Env.scala index c99e68661035..3c30d7767ee5 100644 --- a/modules/mod/src/main/Env.scala +++ b/modules/mod/src/main/Env.scala @@ -1,16 +1,14 @@ package lila.mod import akka.actor.* -import com.softwaremill.macwire.* import chess.ByColor +import com.softwaremill.macwire.* +import lila.common.Bus import lila.core.config.* +import lila.core.forum.BusForum import lila.core.report.SuspectId - -import lila.core.user.WithPerf -import lila.common.Bus import lila.rating.UserWithPerfs.only -import lila.core.forum.BusForum @Module final class Env( diff --git a/modules/mod/src/main/GameMod.scala b/modules/mod/src/main/GameMod.scala index 4eaea620b4ae..4381b128bf64 100644 --- a/modules/mod/src/main/GameMod.scala +++ b/modules/mod/src/main/GameMod.scala @@ -3,10 +3,10 @@ package lila.mod import play.api.data.* import play.api.data.Forms.{ list as formList, * } -import lila.rating.PerfType -import lila.game.Query -import lila.common.Form.{ stringIn, perfKey, given } +import lila.common.Form.{ perfKey, stringIn, given } import lila.db.dsl.{ *, given } +import lila.game.Query +import lila.rating.PerfType object GameMod: diff --git a/modules/mod/src/main/Inquiry.scala b/modules/mod/src/main/Inquiry.scala index 657d6f263357..ed230e8d9728 100644 --- a/modules/mod/src/main/Inquiry.scala +++ b/modules/mod/src/main/Inquiry.scala @@ -1,9 +1,9 @@ package lila.mod import lila.core.LightUser +import lila.core.perf.UserWithPerfs import lila.report.{ Report, ReportApi } import lila.user.{ Me, Note, NoteApi, UserApi } -import lila.core.perf.UserWithPerfs case class Inquiry( mod: LightUser, diff --git a/modules/mod/src/main/IpRender.scala b/modules/mod/src/main/IpRender.scala index d05fdb68caa5..60983a03bf4f 100644 --- a/modules/mod/src/main/IpRender.scala +++ b/modules/mod/src/main/IpRender.scala @@ -7,8 +7,8 @@ import scalalib.cuteName.CuteNameGenerator import scala.jdk.CollectionConverters.* import lila.core.net.IpAddress -import lila.memo.CacheApi import lila.core.perm.Granter +import lila.memo.CacheApi object IpRender: diff --git a/modules/mod/src/main/ModApi.scala b/modules/mod/src/main/ModApi.scala index 0766820fa760..79d2679d3324 100644 --- a/modules/mod/src/main/ModApi.scala +++ b/modules/mod/src/main/ModApi.scala @@ -3,12 +3,11 @@ package lila.mod import chess.PlayerTitle import lila.common.Bus +import lila.core.perm.Permission +import lila.core.report.SuspectId +import lila.core.user.{ UserMark, UserMarks } import lila.report.{ Room, Suspect } -import lila.core.perm.{ Granter, Permission } import lila.user.{ LightUserApi, UserRepo } -import lila.core.report.SuspectId -import lila.core.user.UserMarks -import lila.core.user.UserMark final class ModApi( userRepo: UserRepo, diff --git a/modules/mod/src/main/ModNotifier.scala b/modules/mod/src/main/ModNotifier.scala index 1bde8f8c24fa..8cc3d393302a 100644 --- a/modules/mod/src/main/ModNotifier.scala +++ b/modules/mod/src/main/ModNotifier.scala @@ -1,8 +1,8 @@ package lila.mod import lila.core.notify.* -import lila.report.Suspect import lila.rating.PerfType +import lila.report.Suspect final private class ModNotifier( notifyApi: NotifyApi, diff --git a/modules/mod/src/main/ModlogApi.scala b/modules/mod/src/main/ModlogApi.scala index eb3ef1b0667f..9924e4a722e1 100644 --- a/modules/mod/src/main/ModlogApi.scala +++ b/modules/mod/src/main/ModlogApi.scala @@ -3,14 +3,13 @@ package lila.mod import reactivemongo.api.* import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } +import lila.core.id.ForumCategId import lila.core.irc.IrcApi -import lila.core.msg.MsgPreset -import lila.report.{ Mod, Report, Suspect } +import lila.core.perf.UserWithPerfs import lila.core.perm.Permission +import lila.db.dsl.{ *, given } +import lila.report.{ Mod, Report, Suspect } import lila.user.UserRepo -import lila.core.id.ForumCategId -import lila.core.perf.UserWithPerfs final class ModlogApi(repo: ModlogRepo, userRepo: UserRepo, ircApi: IrcApi, presetsApi: ModPresetsApi)(using Executor diff --git a/modules/mod/src/main/Presets.scala b/modules/mod/src/main/Presets.scala index 78d4003724a6..1507d5258f12 100644 --- a/modules/mod/src/main/Presets.scala +++ b/modules/mod/src/main/Presets.scala @@ -3,10 +3,10 @@ package lila.mod import play.api.data.Form import play.api.data.Forms.* import reactivemongo.api.bson.BSONHandler - import scalalib.Iso -import lila.memo.SettingStore.{ Formable, StringReader } + import lila.core.perm.{ Granter, Permission } +import lila.memo.SettingStore.{ Formable, StringReader } final class ModPresetsApi(settingStore: lila.memo.SettingStore.Builder): diff --git a/modules/mod/src/main/PublicChat.scala b/modules/mod/src/main/PublicChat.scala index ae417101fae5..76a0f598c1c8 100644 --- a/modules/mod/src/main/PublicChat.scala +++ b/modules/mod/src/main/PublicChat.scala @@ -1,10 +1,10 @@ package lila.mod import lila.chat.UserChat -import lila.report.Suspect +import lila.core.swiss.IdName as Swiss import lila.core.tournament.Tournament +import lila.report.Suspect import lila.user.UserRepo -import lila.core.swiss.{ IdName as Swiss } final class PublicChat( chatApi: lila.chat.ChatApi, diff --git a/modules/mod/src/main/RatingRefund.scala b/modules/mod/src/main/RatingRefund.scala index 905b2fe5dda7..db4859fd9449 100644 --- a/modules/mod/src/main/RatingRefund.scala +++ b/modules/mod/src/main/RatingRefund.scala @@ -1,13 +1,13 @@ package lila.mod +import lila.core.game.GameRepo +import lila.core.user.WithPerf import lila.db.dsl.* -import lila.core.game.{ GameRepo } +import lila.game.Query +import lila.rating.PerfExt.refund import lila.rating.PerfType import lila.report.Suspect -import lila.user.{ RankingApi, User, UserApi, UserPerfsRepo } -import lila.core.user.WithPerf -import lila.rating.PerfExt.refund -import lila.game.Query +import lila.user.{ RankingApi, UserApi, UserPerfsRepo } final private class RatingRefund( gameRepo: GameRepo, diff --git a/modules/mod/src/main/SandbagWatch.scala b/modules/mod/src/main/SandbagWatch.scala index 23ccf0b611bd..880c96456333 100644 --- a/modules/mod/src/main/SandbagWatch.scala +++ b/modules/mod/src/main/SandbagWatch.scala @@ -2,7 +2,6 @@ package lila.mod import com.github.blemale.scaffeine.Cache -import lila.game.Game import lila.core.msg.{ MsgApi, MsgPreset } import lila.report.ReportApi diff --git a/modules/mod/src/main/ui/GamifyUi.scala b/modules/mod/src/main/ui/GamifyUi.scala index 3ec7dfa081a4..916cbb6f2487 100644 --- a/modules/mod/src/main/ui/GamifyUi.scala +++ b/modules/mod/src/main/ui/GamifyUi.scala @@ -1,9 +1,10 @@ package lila.mod package ui +import lila.mod.Gamify.Period import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.mod.Gamify.Period final class GamifyUi(helpers: Helpers, modUi: ModUi): import helpers.{ *, given } diff --git a/modules/mod/src/main/ui/ModInquiryUi.scala b/modules/mod/src/main/ui/ModInquiryUi.scala index d0a729b3e48e..2336e6d50a2a 100644 --- a/modules/mod/src/main/ui/ModInquiryUi.scala +++ b/modules/mod/src/main/ui/ModInquiryUi.scala @@ -1,10 +1,11 @@ package lila.mod package ui +import lila.core.config.NetDomain +import lila.report.{ Reason, Report } import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.report.{ Report, Reason } -import lila.core.config.NetDomain final class ModInquiryUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/mod/src/main/ui/ModUi.scala b/modules/mod/src/main/ui/ModUi.scala index 0e702098589a..80ca287e420a 100644 --- a/modules/mod/src/main/ui/ModUi.scala +++ b/modules/mod/src/main/ui/ModUi.scala @@ -2,14 +2,14 @@ package lila.mod package ui import play.api.data.Form +import play.api.libs.json.Json -import lila.ui.* -import ScalatagsTemplate.{ *, given } -import lila.report.{ Report, Reason } +import lila.core.perf.UserWithPerfs import lila.core.perm.Permission import lila.mod.ModActivity.{ Period, Who } -import lila.core.perf.UserWithPerfs -import play.api.libs.json.Json +import lila.ui.* + +import ScalatagsTemplate.{ *, given } case class PendingCounts(streamers: Int, appeals: Int, titles: Int) diff --git a/modules/mod/src/main/ui/ModUserTableUi.scala b/modules/mod/src/main/ui/ModUserTableUi.scala index d9ce7813481c..f79e47216aaf 100644 --- a/modules/mod/src/main/ui/ModUserTableUi.scala +++ b/modules/mod/src/main/ui/ModUserTableUi.scala @@ -2,9 +2,10 @@ package lila.mod package ui import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.user.WithPerfsAndEmails +import ScalatagsTemplate.{ *, given } + object ModUserTableUi: val sortNoneTh = th(attr("data-sort-method") := "none") diff --git a/modules/mod/src/main/ui/ModUserUi.scala b/modules/mod/src/main/ui/ModUserUi.scala index 4b0f11a9949f..2d5f06e19faf 100644 --- a/modules/mod/src/main/ui/ModUserUi.scala +++ b/modules/mod/src/main/ui/ModUserUi.scala @@ -1,13 +1,13 @@ package lila.mod package ui -import lila.ui.* -import ScalatagsTemplate.{ *, given } -import lila.user.WithPerfsAndEmails import lila.core.perm.Permission import lila.core.playban.RageSit -import lila.core.LightUser import lila.evaluation.Display +import lila.ui.* +import lila.user.WithPerfsAndEmails + +import ScalatagsTemplate.{ *, given } final class ModUserUi(helpers: Helpers, modUi: ModUi): import helpers.{ *, given } diff --git a/modules/mod/src/main/ui/PublicChatUi.scala b/modules/mod/src/main/ui/PublicChatUi.scala index 2a47f05ed8ee..d2924279ae92 100644 --- a/modules/mod/src/main/ui/PublicChatUi.scala +++ b/modules/mod/src/main/ui/PublicChatUi.scala @@ -1,10 +1,10 @@ package lila.mod package ui +import lila.chat.{ ChatTimeout, UserChat } import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.chat.UserChat -import lila.chat.ChatTimeout final class PublicChatUi(helpers: Helpers, modUi: ModUi)(highlightBad: String => Frag): import helpers.{ *, given } diff --git a/modules/msg/src/main/BsonHandlers.scala b/modules/msg/src/main/BsonHandlers.scala index 22261f37b1e5..01f1301c271c 100644 --- a/modules/msg/src/main/BsonHandlers.scala +++ b/modules/msg/src/main/BsonHandlers.scala @@ -1,7 +1,7 @@ package lila.msg -import scalalib.ThreadLocalRandom import reactivemongo.api.bson.* +import scalalib.ThreadLocalRandom import lila.db.BSON import lila.db.dsl.{ *, given } diff --git a/modules/msg/src/main/MsgApi.scala b/modules/msg/src/main/MsgApi.scala index 2af2e5b9f346..6675bc3b485b 100644 --- a/modules/msg/src/main/MsgApi.scala +++ b/modules/msg/src/main/MsgApi.scala @@ -4,9 +4,9 @@ import akka.stream.scaladsl.* import reactivemongo.akkastream.cursorProducer import lila.common.{ Bus, LilaStream } -import lila.db.dsl.{ *, given } -import lila.core.relation.Relations import lila.core.msg.PostResult +import lila.core.relation.Relations +import lila.db.dsl.{ *, given } final class MsgApi( colls: MsgColls, diff --git a/modules/msg/src/main/MsgCompat.scala b/modules/msg/src/main/MsgCompat.scala index 70cfbea8c8af..c0a34cfb59ea 100644 --- a/modules/msg/src/main/MsgCompat.scala +++ b/modules/msg/src/main/MsgCompat.scala @@ -4,12 +4,11 @@ import play.api.data.* import play.api.data.Forms.* import play.api.libs.json.* import scalalib.Json.given +import scalalib.paginator.* import lila.common.Json.given import lila.core.LightUser -import lila.common.config.* -import scalalib.paginator.* -import lila.db.dsl.{ given, * } +import lila.db.dsl.{ *, given } final class MsgCompat( api: MsgApi, diff --git a/modules/msg/src/main/MsgContact.scala b/modules/msg/src/main/MsgContact.scala index 56dea3465fa5..14a37eafab64 100644 --- a/modules/msg/src/main/MsgContact.scala +++ b/modules/msg/src/main/MsgContact.scala @@ -1,12 +1,11 @@ package lila.msg -import reactivemongo.api.bson.Macros.Annotations.Key import reactivemongo.api.bson.* +import reactivemongo.api.bson.Macros.Annotations.Key +import lila.core.perm.{ Granter, Permission } import lila.core.user.UserMarks import lila.db.dsl.{ *, given } -import lila.core.perm.Permission -import lila.core.perm.Granter private case class Contact( @Key("_id") id: UserId, diff --git a/modules/msg/src/main/MsgNotify.scala b/modules/msg/src/main/MsgNotify.scala index 053bbf2ca943..bc9145499f9c 100644 --- a/modules/msg/src/main/MsgNotify.scala +++ b/modules/msg/src/main/MsgNotify.scala @@ -5,8 +5,8 @@ import akka.actor.Cancellable import java.util.concurrent.ConcurrentHashMap import lila.common.String.shorten -import lila.db.dsl.{ *, given } import lila.core.notify.* +import lila.db.dsl.{ *, given } final private class MsgNotify( colls: MsgColls, diff --git a/modules/msg/src/main/MsgPreset.scala b/modules/msg/src/main/MsgPreset.scala index 7a412df27a9d..f3a8175a9128 100644 --- a/modules/msg/src/main/MsgPreset.scala +++ b/modules/msg/src/main/MsgPreset.scala @@ -2,8 +2,8 @@ package lila.msg import lila.core.LightUser import lila.core.config.BaseUrl -import lila.core.team.LightTeam import lila.core.id.ForumCategId +import lila.core.team.LightTeam object MsgPreset: diff --git a/modules/msg/src/main/MsgSearch.scala b/modules/msg/src/main/MsgSearch.scala index 8d1b01338330..1bf94c0ba0eb 100644 --- a/modules/msg/src/main/MsgSearch.scala +++ b/modules/msg/src/main/MsgSearch.scala @@ -4,11 +4,10 @@ import reactivemongo.api.bson.* import lila.common.Bus import lila.core.LightUser -import lila.db.dsl.{ *, given } import lila.core.misc.clas.ClasBus - import lila.core.user.KidMode import lila.core.userId.UserSearch +import lila.db.dsl.{ *, given } final class MsgSearch( colls: MsgColls, diff --git a/modules/msg/src/main/MsgSecurity.scala b/modules/msg/src/main/MsgSecurity.scala index 2bd88be35612..badaca03c041 100644 --- a/modules/msg/src/main/MsgSecurity.scala +++ b/modules/msg/src/main/MsgSecurity.scala @@ -1,14 +1,12 @@ package lila.msg import lila.common.Bus -import lila.db.dsl.{ *, given } import lila.core.misc.clas.ClasBus +import lila.core.report.SuspectId +import lila.core.shutup.TextAnalyser import lila.core.team.IsLeaderOf +import lila.db.dsl.{ *, given } import lila.memo.RateLimit -import lila.core.perm.Granter -import lila.core.shutup.TextAnalyser - -import lila.core.report.SuspectId final private class MsgSecurity( colls: MsgColls, diff --git a/modules/oauth/src/main/AccessToken.scala b/modules/oauth/src/main/AccessToken.scala index b5d3b3d6f936..a965ee239990 100644 --- a/modules/oauth/src/main/AccessToken.scala +++ b/modules/oauth/src/main/AccessToken.scala @@ -1,7 +1,7 @@ package lila.oauth -import reactivemongo.api.bson.* import com.roundeights.hasher.Algo +import reactivemongo.api.bson.* import lila.core.net.Bearer diff --git a/modules/oauth/src/main/AccessTokenApi.scala b/modules/oauth/src/main/AccessTokenApi.scala index 728ddca9135a..2635665cd0f6 100644 --- a/modules/oauth/src/main/AccessTokenApi.scala +++ b/modules/oauth/src/main/AccessTokenApi.scala @@ -1,12 +1,12 @@ package lila.oauth -import reactivemongo.api.bson.* import play.api.libs.json.* +import reactivemongo.api.bson.* +import lila.common.Json.given +import lila.core.misc.oauth.TokenRevoke import lila.core.net.Bearer import lila.db.dsl.{ *, given } -import lila.core.misc.oauth.TokenRevoke -import lila.common.Json.given final class AccessTokenApi( coll: Coll, diff --git a/modules/oauth/src/main/AccessTokenRequest.scala b/modules/oauth/src/main/AccessTokenRequest.scala index 67ea85dc5072..cc304dfa751c 100644 --- a/modules/oauth/src/main/AccessTokenRequest.scala +++ b/modules/oauth/src/main/AccessTokenRequest.scala @@ -1,12 +1,12 @@ package lila.oauth +import play.api.data.Form +import play.api.data.Forms.{ mapping, optional, single, text } import play.api.http.HeaderNames import play.api.mvc.RequestHeader -import play.api.data.Form -import play.api.data.Forms.{ mapping, optional, text, single } -import lila.common.String.base64 import lila.common.Form.into +import lila.common.String.base64 object AccessTokenRequest: import Protocol.* diff --git a/modules/oauth/src/main/AuthorizationApi.scala b/modules/oauth/src/main/AuthorizationApi.scala index 2642d91e1a9f..c8698b0975c9 100644 --- a/modules/oauth/src/main/AuthorizationApi.scala +++ b/modules/oauth/src/main/AuthorizationApi.scala @@ -1,6 +1,7 @@ package lila.oauth import reactivemongo.api.bson.* + import lila.db.dsl.* final class AuthorizationApi(val coll: Coll)(using Executor): diff --git a/modules/oauth/src/main/Env.scala b/modules/oauth/src/main/Env.scala index 10eae66b761d..a2d6e1bd3072 100644 --- a/modules/oauth/src/main/Env.scala +++ b/modules/oauth/src/main/Env.scala @@ -4,9 +4,9 @@ import com.softwaremill.macwire.* import com.softwaremill.tagging.* import play.api.Configuration -import lila.core.config.{ Secret, CollName } -import lila.core.data.Strings import lila.common.config.given +import lila.core.config.{ CollName, Secret } +import lila.core.data.Strings import lila.memo.SettingStore.Strings.given @Module diff --git a/modules/oauth/src/main/OAuthScope.scala b/modules/oauth/src/main/OAuthScope.scala index 812cc1cfa4c4..6a796ad48441 100644 --- a/modules/oauth/src/main/OAuthScope.scala +++ b/modules/oauth/src/main/OAuthScope.scala @@ -1,8 +1,6 @@ package lila.oauth - -import cats.derived.* import lila.core.i18n.I18nKey -import lila.core.i18n.I18nKey.{ oauthScope as trans } +import lila.core.i18n.I18nKey.oauthScope as trans sealed abstract class OAuthScope(val key: String, val name: I18nKey): override def toString = s"Scope($key)" diff --git a/modules/oauth/src/main/OAuthServer.scala b/modules/oauth/src/main/OAuthServer.scala index 14657e2c6803..5b8cb19ce46e 100644 --- a/modules/oauth/src/main/OAuthServer.scala +++ b/modules/oauth/src/main/OAuthServer.scala @@ -1,13 +1,13 @@ package lila.oauth +import com.roundeights.hasher.Algo import com.softwaremill.tagging.* import play.api.mvc.{ RequestHeader, Result } -import com.roundeights.hasher.Algo import lila.common.HTTPRequest +import lila.core.config.Secret import lila.core.net.Bearer import lila.memo.SettingStore -import lila.core.config.Secret final class OAuthServer( userApi: lila.core.user.UserApi, diff --git a/modules/oauth/src/main/Protocol.scala b/modules/oauth/src/main/Protocol.scala index 79f96f3a744e..6d85ec9e20cb 100644 --- a/modules/oauth/src/main/Protocol.scala +++ b/modules/oauth/src/main/Protocol.scala @@ -1,12 +1,12 @@ package lila.oauth -import java.util.Base64 -import scala.util.Try -import play.api.libs.json.Json import com.roundeights.hasher.Algo import io.mola.galimatias.{ StrictErrorHandler, URL, URLParsingSettings } +import play.api.libs.json.Json import scalalib.SecureRandom +import java.util.Base64 + import lila.common.String.urlencode object Protocol: diff --git a/modules/oauth/src/main/ui/AuthorizeUi.scala b/modules/oauth/src/main/ui/AuthorizeUi.scala index c8b73a5598b8..09ac480a6995 100644 --- a/modules/oauth/src/main/ui/AuthorizeUi.scala +++ b/modules/oauth/src/main/ui/AuthorizeUi.scala @@ -1,9 +1,10 @@ package lila.oauth package ui +import lila.core.LightUser import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.LightUser final class AuthorizeUi(helpers: Helpers)(lightUserFallback: UserId => LightUser): import helpers.{ *, given } diff --git a/modules/oauth/src/main/ui/TokenUi.scala b/modules/oauth/src/main/ui/TokenUi.scala index 33215f08a31a..0339058d6d3d 100644 --- a/modules/oauth/src/main/ui/TokenUi.scala +++ b/modules/oauth/src/main/ui/TokenUi.scala @@ -4,6 +4,7 @@ package ui import play.api.data.Form import lila.ui.* + import ScalatagsTemplate.{ *, given } final class TokenUi(helpers: Helpers)( diff --git a/modules/opening/src/main/OpeningApi.scala b/modules/opening/src/main/OpeningApi.scala index 561abf60ad63..9923a42be9b9 100644 --- a/modules/opening/src/main/OpeningApi.scala +++ b/modules/opening/src/main/OpeningApi.scala @@ -3,9 +3,9 @@ package lila.opening import play.api.mvc.RequestHeader import lila.core.game.{ GameRepo, PgnDump } -import lila.memo.CacheApi -import lila.core.i18n.{ Translator, Translate } +import lila.core.i18n.{ Translate, Translator } import lila.core.net.Crawler +import lila.memo.CacheApi final class OpeningApi( wikiApi: OpeningWikiApi, diff --git a/modules/opening/src/main/OpeningExplorer.scala b/modules/opening/src/main/OpeningExplorer.scala index 970744f14c33..449ab1b3a78f 100644 --- a/modules/opening/src/main/OpeningExplorer.scala +++ b/modules/opening/src/main/OpeningExplorer.scala @@ -7,6 +7,7 @@ import com.softwaremill.tagging.* import play.api.libs.json.{ JsObject, JsValue, Json, Reads } import play.api.libs.ws.JsonBodyReadables.* import play.api.libs.ws.StandaloneWSClient + import lila.core.net.Crawler final private class OpeningExplorer( diff --git a/modules/opening/src/main/OpeningQuery.scala b/modules/opening/src/main/OpeningQuery.scala index 95f1f0769561..2cc9c4980f8f 100644 --- a/modules/opening/src/main/OpeningQuery.scala +++ b/modules/opening/src/main/OpeningQuery.scala @@ -5,7 +5,6 @@ import chess.Replay import chess.format.pgn.{ PgnMovesStr, PgnStr, SanStr } import chess.format.{ Fen, Uci } import chess.opening.{ Opening, OpeningDb, OpeningKey, OpeningName } -import chess.variant.Standard case class OpeningQuery(replay: Replay, config: OpeningConfig): export replay.state.sans diff --git a/modules/opening/src/main/OpeningSearch.scala b/modules/opening/src/main/OpeningSearch.scala index 62fc67132b31..9faa3a1da8ec 100644 --- a/modules/opening/src/main/OpeningSearch.scala +++ b/modules/opening/src/main/OpeningSearch.scala @@ -2,11 +2,11 @@ package lila.opening import chess.format.pgn.PgnMovesStr import chess.opening.{ Opening, OpeningDb } +import scalalib.HeapSort.topN import java.text.Normalizer import lila.common.Chronometer -import scalalib.HeapSort.topN import lila.memo.CacheApi case class OpeningSearchResult(opening: Opening): diff --git a/modules/opening/src/main/ui/OpeningBits.scala b/modules/opening/src/main/ui/OpeningBits.scala index 4457a12a7b3b..25e92a085d01 100644 --- a/modules/opening/src/main/ui/OpeningBits.scala +++ b/modules/opening/src/main/ui/OpeningBits.scala @@ -1,10 +1,11 @@ package lila.opening package ui -import play.api.libs.json.* import chess.opening.{ Opening, OpeningKey } +import play.api.libs.json.* import lila.ui.* + import ScalatagsTemplate.{ *, given } final class OpeningBits(helpers: Helpers): diff --git a/modules/opening/src/main/ui/OpeningUi.scala b/modules/opening/src/main/ui/OpeningUi.scala index 320d78e0d167..1a1e6053dc33 100644 --- a/modules/opening/src/main/ui/OpeningUi.scala +++ b/modules/opening/src/main/ui/OpeningUi.scala @@ -1,10 +1,9 @@ package lila.opening package ui - -import play.api.libs.json.Json import chess.opening.{ Opening, OpeningKey } import lila.ui.* + import ScalatagsTemplate.{ *, given } final class OpeningUi(helpers: Helpers, bits: OpeningBits, wiki: WikiUi): diff --git a/modules/opening/src/main/ui/WikiUi.scala b/modules/opening/src/main/ui/WikiUi.scala index f4d7d2a19214..8c5fe5fc9155 100644 --- a/modules/opening/src/main/ui/WikiUi.scala +++ b/modules/opening/src/main/ui/WikiUi.scala @@ -4,6 +4,7 @@ package ui import chess.opening.Opening import lila.ui.* + import ScalatagsTemplate.{ *, given } final class WikiUi(helpers: Helpers, bits: OpeningBits): diff --git a/modules/perfStat/src/main/JsonView.scala b/modules/perfStat/src/main/JsonView.scala index a636715d414c..1262fb0a984c 100644 --- a/modules/perfStat/src/main/JsonView.scala +++ b/modules/perfStat/src/main/JsonView.scala @@ -4,10 +4,8 @@ import play.api.libs.json.* import lila.common.Json.given import lila.core.LightUser -import lila.rating.{ Glicko, Perf } - import lila.core.i18n.Translate -import lila.rating.PerfType +import lila.rating.{ Glicko, PerfType } final class JsonView(getLightUser: LightUser.GetterSync): diff --git a/modules/perfStat/src/main/PerfStat.scala b/modules/perfStat/src/main/PerfStat.scala index 83bab3abb38a..f9be0947c031 100644 --- a/modules/perfStat/src/main/PerfStat.scala +++ b/modules/perfStat/src/main/PerfStat.scala @@ -2,9 +2,7 @@ package lila.perfStat import reactivemongo.api.bson.Macros.Annotations.Key import java.time.Duration - import scalalib.HeapSort - import lila.rating.PerfType extension (p: Pov) def loss = p.game.winner.map(_.color != p.color) diff --git a/modules/perfStat/src/main/PerfStatApi.scala b/modules/perfStat/src/main/PerfStatApi.scala index 50217e1a733a..81a67e899ebc 100644 --- a/modules/perfStat/src/main/PerfStatApi.scala +++ b/modules/perfStat/src/main/PerfStatApi.scala @@ -1,13 +1,10 @@ package lila.perfStat -import lila.rating.{ Perf, UserRankMap } +import lila.core.perf.{ PerfId, UserWithPerfs } import lila.core.perm.Granter - -import lila.rating.PerfType -import lila.rating.PerfExt.established -import lila.core.perf.UserWithPerfs -import lila.core.perf.PerfId import lila.rating.Glicko.minRating +import lila.rating.PerfExt.established +import lila.rating.{ PerfType, UserRankMap } case class PerfStatData( user: UserWithPerfs, diff --git a/modules/perfStat/src/main/PerfStatUi.scala b/modules/perfStat/src/main/PerfStatUi.scala index afe308eb96ab..0f8003d5a209 100644 --- a/modules/perfStat/src/main/PerfStatUi.scala +++ b/modules/perfStat/src/main/PerfStatUi.scala @@ -2,13 +2,14 @@ package lila.perfStat import play.api.libs.json.Json -import lila.ui.* -import ScalatagsTemplate.{ *, given } -import lila.rating.PerfType -import lila.core.perm.Granter -import lila.core.perf.UserWithPerfs import lila.common.Json.given import lila.core.data.SafeJsonStr +import lila.core.perf.UserWithPerfs +import lila.core.perm.Granter +import lila.rating.PerfType +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class PerfStatUi(helpers: Helpers)(communityMenu: Context ?=> Frag): import helpers.{ *, given } diff --git a/modules/plan/src/main/JsonHandlers.scala b/modules/plan/src/main/JsonHandlers.scala index 22524fcdbd89..e8461cb93ea1 100644 --- a/modules/plan/src/main/JsonHandlers.scala +++ b/modules/plan/src/main/JsonHandlers.scala @@ -6,8 +6,8 @@ import play.api.libs.json.* import java.util.Currency import scala.util.Try -import lila.core.net.IpAddress import lila.common.Json.given +import lila.core.net.IpAddress private object JsonHandlers: diff --git a/modules/plan/src/main/PayPalClient.scala b/modules/plan/src/main/PayPalClient.scala index ae807b5fea90..80589f1e0d32 100644 --- a/modules/plan/src/main/PayPalClient.scala +++ b/modules/plan/src/main/PayPalClient.scala @@ -12,9 +12,9 @@ import play.api.libs.ws.{ StandaloneWSClient, StandaloneWSResponse, WSAuthScheme import java.util.Currency import lila.common.Json.given -import lila.core.config.* import lila.common.autoconfig.* import lila.common.config.given +import lila.core.config.* import lila.memo.CacheApi final private class PayPalClient( @@ -233,9 +233,6 @@ final private class PayPalClient( } } - private def debugInput(data: Seq[(String, Matchable)]) = - fixInput(data).map { (k, v) => s"$k=$v" }.mkString(" ") - object PayPalClient: case class AccessToken(value: String) extends StringValue diff --git a/modules/plan/src/main/PlanApi.scala b/modules/plan/src/main/PlanApi.scala index 79ed5d0c5ed6..68ded11733fa 100644 --- a/modules/plan/src/main/PlanApi.scala +++ b/modules/plan/src/main/PlanApi.scala @@ -3,11 +3,11 @@ package lila.plan import play.api.i18n.Lang import reactivemongo.api.* -import lila.core.config.Secret import lila.common.Bus +import lila.core.config.Secret +import lila.core.net.IpAddress import lila.db.dsl.{ *, given } import lila.memo.CacheApi.* -import lila.core.net.IpAddress final class PlanApi( stripeClient: StripeClient, diff --git a/modules/plan/src/main/ui/PlanPages.scala b/modules/plan/src/main/ui/PlanPages.scala index 07cc624c5556..29455e674fce 100644 --- a/modules/plan/src/main/ui/PlanPages.scala +++ b/modules/plan/src/main/ui/PlanPages.scala @@ -1,9 +1,7 @@ package lila.plan package ui - -import scalalib.paginator.Paginator - import lila.ui.* + import ScalatagsTemplate.{ *, given } final class PlanPages(helpers: Helpers)(fishnetPerDay: Int): diff --git a/modules/plan/src/main/ui/PlanUi.scala b/modules/plan/src/main/ui/PlanUi.scala index 5dcb2afb87cb..cc85bf9afc5d 100644 --- a/modules/plan/src/main/ui/PlanUi.scala +++ b/modules/plan/src/main/ui/PlanUi.scala @@ -1,11 +1,10 @@ package lila.plan package ui - -import scalalib.paginator.Paginator +import java.util.Currency import lila.ui.* + import ScalatagsTemplate.{ *, given } -import java.util.Currency final class PlanUi(helpers: Helpers)(contactEmail: EmailAddress): import helpers.{ *, given } diff --git a/modules/playban/src/main/PlaybanApi.scala b/modules/playban/src/main/PlaybanApi.scala index 4535da9676ce..6804f6ff54de 100644 --- a/modules/playban/src/main/PlaybanApi.scala +++ b/modules/playban/src/main/PlaybanApi.scala @@ -5,10 +5,10 @@ import reactivemongo.api.bson.* import scalalib.model.Days import lila.common.{ Bus, Uptime } -import lila.db.dsl.{ *, given } -import lila.core.msg.{ MsgApi, MsgPreset } import lila.core.game.Source +import lila.core.msg.MsgApi import lila.core.playban.RageSit as RageSitCounter +import lila.db.dsl.{ *, given } final class PlaybanApi( coll: Coll, diff --git a/modules/playban/src/main/model.scala b/modules/playban/src/main/model.scala index d4a207b6fdd4..1296b08cac6f 100644 --- a/modules/playban/src/main/model.scala +++ b/modules/playban/src/main/model.scala @@ -1,10 +1,10 @@ package lila.playban import play.api.libs.json.* +import scalalib.model.Days import lila.common.Json.given import lila.core.playban.RageSit as RageSitCounter -import scalalib.model.Days case class UserRecord( _id: UserId, diff --git a/modules/pool/src/main/GameStarter.scala b/modules/pool/src/main/GameStarter.scala index 93143ab8b6e2..7571b131fcfd 100644 --- a/modules/pool/src/main/GameStarter.scala +++ b/modules/pool/src/main/GameStarter.scala @@ -2,7 +2,7 @@ package lila.pool import chess.ByColor -import lila.core.game.{ IdGenerator, GameRepo, NewPlayer, Source } +import lila.core.game.{ GameRepo, IdGenerator, NewPlayer, Source } import lila.core.pool.{ Pairing, Pairings } final private class GameStarter( diff --git a/modules/pool/src/main/MatchMaking.scala b/modules/pool/src/main/MatchMaking.scala index 0ff7a8fa40e7..964ea7826484 100644 --- a/modules/pool/src/main/MatchMaking.scala +++ b/modules/pool/src/main/MatchMaking.scala @@ -1,8 +1,9 @@ package lila.pool -import scala.math.abs import scalalib.WMMatching +import scala.math.abs + import lila.core.pool.PoolMember object MatchMaking: diff --git a/modules/pool/src/main/PoolActor.scala b/modules/pool/src/main/PoolActor.scala index d3383bd5635b..26d1cbf13c2a 100644 --- a/modules/pool/src/main/PoolActor.scala +++ b/modules/pool/src/main/PoolActor.scala @@ -4,8 +4,8 @@ import akka.actor.* import akka.pattern.pipe import scalalib.ThreadLocalRandom +import lila.core.pool.{ HookThieve, Joiner, PoolMember } import lila.core.socket.Sris -import lila.core.pool.{ PoolMember, HookThieve, Joiner } final private class PoolActor( config: PoolConfig, diff --git a/modules/pool/src/main/PoolApi.scala b/modules/pool/src/main/PoolApi.scala index 6a35fe7a0a4f..accd551ceb56 100644 --- a/modules/pool/src/main/PoolApi.scala +++ b/modules/pool/src/main/PoolApi.scala @@ -2,9 +2,8 @@ package lila.pool import akka.actor.* -import lila.core.rating.RatingRange -import lila.core.socket.{ Sri, Sris } -import lila.core.pool.{ PoolMember, PoolConfigId, Joiner } +import lila.core.pool.{ Joiner, PoolConfigId } +import lila.core.socket.Sris final class PoolApi( val configs: List[PoolConfig], diff --git a/modules/pool/src/main/PoolConfig.scala b/modules/pool/src/main/PoolConfig.scala index 4ac7aff193ce..bd729c10358c 100644 --- a/modules/pool/src/main/PoolConfig.scala +++ b/modules/pool/src/main/PoolConfig.scala @@ -1,9 +1,9 @@ package lila.pool import play.api.i18n.Lang + import lila.core.i18n.Translator import lila.core.pool.PoolConfigId - import lila.rating.PerfType case class PoolConfig( diff --git a/modules/pool/src/main/PoolList.scala b/modules/pool/src/main/PoolList.scala index 7b2bb7def57d..36745e928d94 100644 --- a/modules/pool/src/main/PoolList.scala +++ b/modules/pool/src/main/PoolList.scala @@ -2,6 +2,7 @@ package lila.pool import chess.Clock import play.api.libs.json.Json + import lila.core.pool.IsClockCompatible object PoolList: diff --git a/modules/pool/src/main/PoolMember.scala b/modules/pool/src/main/PoolMember.scala index afb2f1c3da8d..77fa23bf271a 100644 --- a/modules/pool/src/main/PoolMember.scala +++ b/modules/pool/src/main/PoolMember.scala @@ -1,8 +1,8 @@ package lila.pool import lila.core.playban.RageSit +import lila.core.pool.{ Joiner, PoolMember } import lila.core.rating.RatingRange -import lila.core.pool.{ PoolMember, Joiner } extension (m: PoolMember) def incMisses = m.copy(misses = m.misses + 1) diff --git a/modules/practice/src/main/PracticeStructure.scala b/modules/practice/src/main/PracticeStructure.scala index 933058b6eb70..82285daf8e6c 100644 --- a/modules/practice/src/main/PracticeStructure.scala +++ b/modules/practice/src/main/PracticeStructure.scala @@ -1,7 +1,7 @@ package lila.practice +import lila.core.study.data.{ StudyChapterName, StudyName } import lila.study.Chapter -import lila.core.study.data.{ StudyName, StudyChapterName } case class PracticeStructure(sections: List[PracticeSection]): diff --git a/modules/practice/src/main/PracticeUi.scala b/modules/practice/src/main/PracticeUi.scala index 62b00071a3f9..661aca68d768 100644 --- a/modules/practice/src/main/PracticeUi.scala +++ b/modules/practice/src/main/PracticeUi.scala @@ -1,12 +1,13 @@ package lila.practice package ui -import play.api.libs.json.* import play.api.data.Form +import play.api.libs.json.* +import lila.core.i18n.I18nKey import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.i18n.I18nKey final class PracticeUi(helpers: Helpers)( csp: Update[ContentSecurityPolicy], diff --git a/modules/pref/src/main/PrefApi.scala b/modules/pref/src/main/PrefApi.scala index 43aaa150d1db..9b45153c20f2 100644 --- a/modules/pref/src/main/PrefApi.scala +++ b/modules/pref/src/main/PrefApi.scala @@ -4,9 +4,9 @@ import chess.{ ByColor, Color } import play.api.mvc.RequestHeader import reactivemongo.api.bson.* +import lila.core.userId import lila.db.dsl.{ *, given } import lila.memo.CacheApi.* -import lila.core.userId final class PrefApi( val coll: Coll, diff --git a/modules/pref/src/main/ui/AccountPages.scala b/modules/pref/src/main/ui/AccountPages.scala index 6be7b50d1b7b..810e25f5a4fe 100644 --- a/modules/pref/src/main/ui/AccountPages.scala +++ b/modules/pref/src/main/ui/AccountPages.scala @@ -4,6 +4,7 @@ package ui import play.api.data.Form import lila.ui.* + import ScalatagsTemplate.{ *, given } final class AccountPages(helpers: Helpers, ui: AccountUi, flagApi: lila.core.user.FlagApi): diff --git a/modules/pref/src/main/ui/AccountPref.scala b/modules/pref/src/main/ui/AccountPref.scala index 110dfc64e17f..f3519e4209df 100644 --- a/modules/pref/src/main/ui/AccountPref.scala +++ b/modules/pref/src/main/ui/AccountPref.scala @@ -4,6 +4,7 @@ package ui import play.api.data.Form import lila.ui.* + import ScalatagsTemplate.{ *, given } final class AccountPref(helpers: Helpers, helper: PrefHelper, bits: AccountUi): diff --git a/modules/pref/src/main/ui/AccountUi.scala b/modules/pref/src/main/ui/AccountUi.scala index e15c80be8b86..2ae2aef4e6a0 100644 --- a/modules/pref/src/main/ui/AccountUi.scala +++ b/modules/pref/src/main/ui/AccountUi.scala @@ -1,9 +1,7 @@ package lila.pref package ui - -import play.api.data.Form - import lila.ui.* + import ScalatagsTemplate.{ *, given } final class AccountUi(helpers: Helpers): diff --git a/modules/pref/src/main/ui/DasherJson.scala b/modules/pref/src/main/ui/DasherJson.scala index 9ed86cddca4e..344bb58be085 100644 --- a/modules/pref/src/main/ui/DasherJson.scala +++ b/modules/pref/src/main/ui/DasherJson.scala @@ -3,10 +3,10 @@ package ui import play.api.libs.json.* -import lila.ui.Context -import lila.core.i18n.{ I18nKey as trans } import lila.common.Json.given +import lila.core.i18n.I18nKey as trans import lila.core.perm.Granter +import lila.ui.Context object DasherJson: diff --git a/modules/pref/src/main/ui/PrefHelper.scala b/modules/pref/src/main/ui/PrefHelper.scala index ed98f7a37e5b..062bdc168411 100644 --- a/modules/pref/src/main/ui/PrefHelper.scala +++ b/modules/pref/src/main/ui/PrefHelper.scala @@ -1,7 +1,7 @@ package lila package pref -import lila.core.i18n.{ Translate, I18nKey as trans } +import lila.core.i18n.{ I18nKey as trans, Translate } trait PrefHelper: diff --git a/modules/pref/src/main/ui/TwoFactorUi.scala b/modules/pref/src/main/ui/TwoFactorUi.scala index 00802df88dff..09feec82201a 100644 --- a/modules/pref/src/main/ui/TwoFactorUi.scala +++ b/modules/pref/src/main/ui/TwoFactorUi.scala @@ -4,6 +4,7 @@ package ui import play.api.data.Form import lila.ui.* + import ScalatagsTemplate.{ *, given } final class TwoFactorUi(helpers: Helpers, ui: AccountUi)( @@ -11,7 +12,6 @@ final class TwoFactorUi(helpers: Helpers, ui: AccountUi)( ): import helpers.{ *, given } import trans.{ tfa as trt } - import ui.AccountPage def setup(form: Form[?])(using Context)(using me: Me) = val secret = form("secret").value.orZero diff --git a/modules/push/src/main/FirebasePush.scala b/modules/push/src/main/FirebasePush.scala index 86cc68e0ebea..87423b8f4d32 100644 --- a/modules/push/src/main/FirebasePush.scala +++ b/modules/push/src/main/FirebasePush.scala @@ -5,9 +5,9 @@ import play.api.ConfigLoader import play.api.libs.json.* import play.api.libs.ws.JsonBodyWritables.* import play.api.libs.ws.StandaloneWSClient +import scalalib.cache.FrequencyThreshold import lila.common.Chronometer -import scalalib.cache.FrequencyThreshold import lila.core.data.LazyFu final private class FirebasePush( diff --git a/modules/push/src/main/PushApi.scala b/modules/push/src/main/PushApi.scala index 5c6f0562a03b..54d4cdf70631 100644 --- a/modules/push/src/main/PushApi.scala +++ b/modules/push/src/main/PushApi.scala @@ -3,16 +3,16 @@ package lila.push import akka.actor.* import play.api.libs.json.* -import lila.core.challenge.Challenge -import lila.common.String.shorten import lila.common.LilaFuture +import lila.common.String.shorten import lila.core.LightUser +import lila.core.challenge.Challenge +import lila.core.data.LazyFu import lila.core.misc.map.Tell import lila.core.misc.push.TourSoon +import lila.core.notify.* import lila.core.round.{ IsOnGame, MoveEvent } -import lila.core.data.LazyFu import lila.core.study.data.StudyName -import lila.core.notify.* final private class PushApi( firebasePush: FirebasePush, diff --git a/modules/push/src/main/WebPush.scala b/modules/push/src/main/WebPush.scala index 27289d4d00ec..726c30a86611 100644 --- a/modules/push/src/main/WebPush.scala +++ b/modules/push/src/main/WebPush.scala @@ -6,9 +6,9 @@ import play.api.libs.ws.JsonBodyWritables.* import play.api.libs.ws.StandaloneWSClient import lila.common.Json.given -import lila.core.data.LazyFu import lila.common.autoconfig.* import lila.core.config.ConfigName +import lila.core.data.LazyFu final private class WebPush( webSubscriptionApi: WebSubscriptionApi, diff --git a/modules/puzzle/src/main/BsonHandlers.scala b/modules/puzzle/src/main/BsonHandlers.scala index f78e24bf6021..ab5b80416a81 100644 --- a/modules/puzzle/src/main/BsonHandlers.scala +++ b/modules/puzzle/src/main/BsonHandlers.scala @@ -5,9 +5,9 @@ import reactivemongo.api.bson.* import scala.util.{ Success, Try } +import lila.core.rating.Glicko import lila.db.BSON import lila.db.dsl.{ *, given } -import lila.core.rating.Glicko object BsonHandlers: diff --git a/modules/puzzle/src/main/DailyPuzzle.scala b/modules/puzzle/src/main/DailyPuzzle.scala index bfe7c1ceece4..d99c81227018 100644 --- a/modules/puzzle/src/main/DailyPuzzle.scala +++ b/modules/puzzle/src/main/DailyPuzzle.scala @@ -1,6 +1,4 @@ package lila.puzzle - -import akka.pattern.ask import chess.format.{ BoardFen, Uci } import scalalib.ThreadLocalRandom.odds diff --git a/modules/puzzle/src/main/Env.scala b/modules/puzzle/src/main/Env.scala index 136094229c64..aae9f9d94448 100644 --- a/modules/puzzle/src/main/Env.scala +++ b/modules/puzzle/src/main/Env.scala @@ -4,9 +4,8 @@ import com.softwaremill.macwire.* import play.api.Configuration import lila.common.autoconfig.{ *, given } -import lila.common.config.* -import lila.db.AsyncColl import lila.core.config.* +import lila.db.AsyncColl @Module private class PuzzleConfig( diff --git a/modules/puzzle/src/main/JsonView.scala b/modules/puzzle/src/main/JsonView.scala index a5f75a3c29f1..4834973eecb8 100644 --- a/modules/puzzle/src/main/JsonView.scala +++ b/modules/puzzle/src/main/JsonView.scala @@ -1,12 +1,11 @@ package lila.puzzle +import chess.format.* import play.api.libs.json.* -import lila.common.Json.{ *, given } - +import lila.common.Json.given +import lila.core.i18n.{ Translate, Translator } import lila.tree.{ Metas, NewBranch, NewTree } -import lila.core.i18n.{ Translate, Translator, defaultLang } -import chess.format.* final class JsonView( gameJson: GameJson, diff --git a/modules/puzzle/src/main/PuzzleActivity.scala b/modules/puzzle/src/main/PuzzleActivity.scala index 0d7f8d626233..bff7b71e0a74 100644 --- a/modules/puzzle/src/main/PuzzleActivity.scala +++ b/modules/puzzle/src/main/PuzzleActivity.scala @@ -5,7 +5,6 @@ import play.api.libs.json.* import reactivemongo.akkastream.cursorProducer import lila.common.Json.given - import lila.db.dsl.{ *, given } final class PuzzleActivity( diff --git a/modules/puzzle/src/main/PuzzleApi.scala b/modules/puzzle/src/main/PuzzleApi.scala index 505976515649..3ed5744b2c86 100644 --- a/modules/puzzle/src/main/PuzzleApi.scala +++ b/modules/puzzle/src/main/PuzzleApi.scala @@ -1,11 +1,11 @@ package lila.puzzle +import scalalib.actor.AsyncActorSequencers import scalalib.paginator.Paginator -import lila.db.dsl.{ *, given } -import lila.db.paginator.Adapter import lila.core.i18n.I18nKey -import scalalib.actor.AsyncActorSequencers +import lila.db.dsl.{ *, given } +import lila.db.paginator.Adapter final class PuzzleApi( colls: PuzzleColls, diff --git a/modules/puzzle/src/main/PuzzleFinisher.scala b/modules/puzzle/src/main/PuzzleFinisher.scala index d184ede592d0..d1ca372a7d60 100644 --- a/modules/puzzle/src/main/PuzzleFinisher.scala +++ b/modules/puzzle/src/main/PuzzleFinisher.scala @@ -1,20 +1,16 @@ package lila.puzzle import chess.Mode - import scalalib.actor.AsyncActorSequencers import lila.common.Bus +import lila.core.perf.Perf +import lila.core.rating.Glicko import lila.db.dsl.{ *, given } import lila.puzzle.PuzzleForm.batch.Solution -import lila.rating.glicko2 -import lila.rating.PerfType -import lila.core.rating.Glicko -import lila.core.perf.Perf -import lila.rating.GlickoExt.sanityCheck +import lila.rating.GlickoExt.{ average, cap, sanityCheck } import lila.rating.PerfExt.* -import lila.rating.GlickoExt.cap -import lila.rating.GlickoExt.average +import lila.rating.{ PerfType, glicko2 } final private[puzzle] class PuzzleFinisher( api: PuzzleApi, diff --git a/modules/puzzle/src/main/PuzzleHistory.scala b/modules/puzzle/src/main/PuzzleHistory.scala index 00709d6505e9..e45204f5d3b4 100644 --- a/modules/puzzle/src/main/PuzzleHistory.scala +++ b/modules/puzzle/src/main/PuzzleHistory.scala @@ -1,8 +1,9 @@ package lila.puzzle import scalalib.paginator.{ AdapterLike, Paginator } -import lila.db.dsl.{ *, given } + import lila.core.user.WithPerf +import lila.db.dsl.{ *, given } object PuzzleHistory: diff --git a/modules/puzzle/src/main/PuzzleOpening.scala b/modules/puzzle/src/main/PuzzleOpening.scala index 1f184e620500..23f961067d17 100644 --- a/modules/puzzle/src/main/PuzzleOpening.scala +++ b/modules/puzzle/src/main/PuzzleOpening.scala @@ -4,8 +4,8 @@ import chess.opening.{ Opening, OpeningDb, OpeningFamily } import reactivemongo.akkastream.cursorProducer import lila.common.{ LilaOpeningFamily, LilaStream, SimpleOpening } -import lila.db.dsl.{ *, given } import lila.core.i18n.I18nKey +import lila.db.dsl.{ *, given } import lila.memo.{ CacheApi, MongoCache } case class PuzzleOpeningCollection( diff --git a/modules/puzzle/src/main/PuzzlePath.scala b/modules/puzzle/src/main/PuzzlePath.scala index a5b7c256ceec..781779000ad2 100644 --- a/modules/puzzle/src/main/PuzzlePath.scala +++ b/modules/puzzle/src/main/PuzzlePath.scala @@ -1,6 +1,7 @@ package lila.puzzle import scalalib.Iso + import lila.db.dsl.{ *, given } object PuzzlePath: diff --git a/modules/puzzle/src/main/PuzzleTheme.scala b/modules/puzzle/src/main/PuzzleTheme.scala index 98d15cdc2d80..89cd6a29ed56 100644 --- a/modules/puzzle/src/main/PuzzleTheme.scala +++ b/modules/puzzle/src/main/PuzzleTheme.scala @@ -1,7 +1,7 @@ package lila.puzzle -import lila.core.i18n.I18nKey.puzzleTheme as i import lila.core.i18n.I18nKey +import lila.core.i18n.I18nKey.puzzleTheme as i case class PuzzleTheme(key: PuzzleTheme.Key, name: I18nKey, description: I18nKey) diff --git a/modules/puzzle/src/main/PuzzleTrust.scala b/modules/puzzle/src/main/PuzzleTrust.scala index 3fca0159eeac..0dcb4dd76077 100644 --- a/modules/puzzle/src/main/PuzzleTrust.scala +++ b/modules/puzzle/src/main/PuzzleTrust.scala @@ -1,7 +1,7 @@ package lila.puzzle -import lila.db.dsl.{ *, given } import lila.core.perf.UserWithPerfs +import lila.db.dsl.{ *, given } final private class PuzzleTrustApi(colls: PuzzleColls, userApi: lila.core.user.UserApi)(using Executor): diff --git a/modules/puzzle/src/main/ui/PuzzleBits.scala b/modules/puzzle/src/main/ui/PuzzleBits.scala index 83df4881cadd..891f7144a1a1 100644 --- a/modules/puzzle/src/main/ui/PuzzleBits.scala +++ b/modules/puzzle/src/main/ui/PuzzleBits.scala @@ -1,12 +1,13 @@ package lila.puzzle package ui -import play.api.libs.json.Json import chess.format.{ BoardFen, Uci } +import play.api.libs.json.Json +import lila.core.i18n.I18nKey import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.i18n.I18nKey final class PuzzleBits(helpers: Helpers)(cevalTranslations: Seq[I18nKey]): import helpers.{ *, given } diff --git a/modules/puzzle/src/main/ui/PuzzleUi.scala b/modules/puzzle/src/main/ui/PuzzleUi.scala index fef72e2361fb..415c31556486 100644 --- a/modules/puzzle/src/main/ui/PuzzleUi.scala +++ b/modules/puzzle/src/main/ui/PuzzleUi.scala @@ -1,15 +1,15 @@ package lila.puzzle package ui -import scalalib.paginator.Paginator import play.api.libs.json.* -import chess.format.{ BoardFen, Uci } +import scalalib.paginator.Paginator -import lila.ui.* -import ScalatagsTemplate.{ *, given } -import lila.common.LilaOpeningFamily import lila.common.Json.given +import lila.common.LilaOpeningFamily import lila.core.i18n.I18nKey +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class PuzzleUi(helpers: Helpers, val bits: PuzzleBits)( analyseCsp: Update[ContentSecurityPolicy], diff --git a/modules/puzzle/src/test/JsonViewTest.scala b/modules/puzzle/src/test/JsonViewTest.scala index fd50c13b6d8e..def231543fd4 100644 --- a/modules/puzzle/src/test/JsonViewTest.scala +++ b/modules/puzzle/src/test/JsonViewTest.scala @@ -1,7 +1,8 @@ package lila.puzzle import chess.format.{ Fen, Uci } -import lila.rating.{ Glicko, Perf } + +import lila.rating.Glicko import lila.tree import lila.tree.NewTree diff --git a/modules/racer/src/main/Env.scala b/modules/racer/src/main/Env.scala index 65b9dd93135c..c1273ce90a18 100644 --- a/modules/racer/src/main/Env.scala +++ b/modules/racer/src/main/Env.scala @@ -19,7 +19,7 @@ final class Env( db: lila.db.Db )(using Executor, Scheduler, play.api.Mode): - private lazy val colls = RacerColls(puzzle = puzzleColls.puzzle) + RacerColls(puzzle = puzzleColls.puzzle) lazy val api = wire[RacerApi] diff --git a/modules/racer/src/main/RacerBsonHandlers.scala b/modules/racer/src/main/RacerBsonHandlers.scala index 46246b65f3f8..8f66e1f0b683 100644 --- a/modules/racer/src/main/RacerBsonHandlers.scala +++ b/modules/racer/src/main/RacerBsonHandlers.scala @@ -3,9 +3,9 @@ package lila.racer import chess.format.{ Fen, Uci } import reactivemongo.api.bson.* +import lila.core.id.PuzzleId import lila.db.dsl.{ *, given } import lila.storm.StormPuzzle -import lila.core.id.PuzzleId private object RacerBsonHandlers: diff --git a/modules/racer/src/main/RacerSocket.scala b/modules/racer/src/main/RacerSocket.scala index 0a9bbcecf463..108e48c7c89b 100644 --- a/modules/racer/src/main/RacerSocket.scala +++ b/modules/racer/src/main/RacerSocket.scala @@ -2,8 +2,8 @@ package lila.racer import play.api.libs.json.{ JsObject, Json } -import lila.room.RoomSocket.{ Protocol as RP, * } import lila.core.socket.{ protocol as P, * } +import lila.room.RoomSocket.{ Protocol as RP, * } final private class RacerSocket( api: RacerApi, diff --git a/modules/racer/src/main/ui/RacerUi.scala b/modules/racer/src/main/ui/RacerUi.scala index 8af66ec372ef..eed3b6c79c44 100644 --- a/modules/racer/src/main/ui/RacerUi.scala +++ b/modules/racer/src/main/ui/RacerUi.scala @@ -3,9 +3,10 @@ package ui import play.api.libs.json.* -import lila.ui.{ *, given } -import ScalatagsTemplate.{ *, given } import lila.core.id.CmsPageKey +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class RacerUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/rating/src/main/BSONHandlers.scala b/modules/rating/src/main/BSONHandlers.scala index dc8e3096a41a..af5f1f9b1dec 100644 --- a/modules/rating/src/main/BSONHandlers.scala +++ b/modules/rating/src/main/BSONHandlers.scala @@ -2,9 +2,8 @@ package lila.rating import reactivemongo.api.bson.BSONHandler -import lila.db.dsl.given import lila.core.perf.PerfId -import lila.rating.PerfType +import lila.db.dsl.given object BSONHandlers: diff --git a/modules/rating/src/main/Gaussian.scala b/modules/rating/src/main/Gaussian.scala index 79d4c713fb78..21a9012cf674 100644 --- a/modules/rating/src/main/Gaussian.scala +++ b/modules/rating/src/main/Gaussian.scala @@ -2,8 +2,6 @@ package lila.rating import org.apache.commons.math3.special.Erf.{ erf, erfInv } -import scala.math.sqrt - /** Represents a Gaussian distribution over a single real variable. */ final class Gaussian(mu: Double, sigma: Double): diff --git a/modules/rating/src/main/Glicko.scala b/modules/rating/src/main/Glicko.scala index c666e2826b52..cea3b5bb82ea 100644 --- a/modules/rating/src/main/Glicko.scala +++ b/modules/rating/src/main/Glicko.scala @@ -2,9 +2,9 @@ package lila.rating import reactivemongo.api.bson.{ BSONDocument, BSONDocumentHandler } -import lila.db.BSON -import lila.core.rating.Glicko import lila.core.perf.Perf +import lila.core.rating.Glicko +import lila.db.BSON import lila.rating.PerfExt.* object GlickoExt: diff --git a/modules/rating/src/main/Perf.scala b/modules/rating/src/main/Perf.scala index b388a5c992e8..04a8fffed273 100644 --- a/modules/rating/src/main/Perf.scala +++ b/modules/rating/src/main/Perf.scala @@ -2,13 +2,11 @@ package lila.rating import reactivemongo.api.bson.{ BSONDocument, BSONDocumentHandler, Macros } +import lila.core.perf.{ Perf, PuzPerf } +import lila.core.rating.Glicko import lila.db.BSON import lila.db.dsl.given -import lila.rating.PerfType -import lila.core.rating.Glicko import lila.rating.GlickoExt.* -import lila.core.perf.Perf -import lila.core.perf.PuzPerf object PerfExt: diff --git a/modules/rating/src/main/PerfType.scala b/modules/rating/src/main/PerfType.scala index 83a20b89070f..814931a5f712 100644 --- a/modules/rating/src/main/PerfType.scala +++ b/modules/rating/src/main/PerfType.scala @@ -1,8 +1,8 @@ package lila.rating import cats.derived.* -import chess.variant -import chess.{ Centis, Speed } +import chess.{ Centis, Speed, variant } + import lila.core.i18n.{ I18nKey, Translate } import lila.core.perf.PerfId import lila.ui.Icon diff --git a/modules/rating/src/main/RatingFactor.scala b/modules/rating/src/main/RatingFactor.scala index 20ad5109ea20..9b9edc7262b2 100644 --- a/modules/rating/src/main/RatingFactor.scala +++ b/modules/rating/src/main/RatingFactor.scala @@ -1,11 +1,8 @@ package lila.rating import reactivemongo.api.bson.BSONHandler - import scalalib.Iso -import lila.rating.PerfType - opaque type RatingFactor = Double object RatingFactor extends OpaqueDouble[RatingFactor]: diff --git a/modules/rating/src/main/RatingRange.scala b/modules/rating/src/main/RatingRange.scala index 024f60ddd816..5783af09991b 100644 --- a/modules/rating/src/main/RatingRange.scala +++ b/modules/rating/src/main/RatingRange.scala @@ -1,6 +1,6 @@ package lila.rating -import lila.core.{ rating as hub } +import lila.core.rating as hub object RatingRange: diff --git a/modules/rating/src/main/RatingRegulator.scala b/modules/rating/src/main/RatingRegulator.scala index cbdded718465..561ae745131f 100644 --- a/modules/rating/src/main/RatingRegulator.scala +++ b/modules/rating/src/main/RatingRegulator.scala @@ -1,6 +1,4 @@ package lila.rating - -import lila.rating.PerfType import lila.core.perf.Perf object RatingRegulator: diff --git a/modules/rating/src/main/UserPerfs.scala b/modules/rating/src/main/UserPerfs.scala index 6a075d4e3ca0..3fe31e9a18d0 100644 --- a/modules/rating/src/main/UserPerfs.scala +++ b/modules/rating/src/main/UserPerfs.scala @@ -1,18 +1,12 @@ package lila.rating import chess.Speed - import scalalib.HeapSort.* -import lila.rating.{ Glicko, Perf } -import lila.rating.PerfType +import lila.core.perf.{ KeyedPerf, Perf, PuzPerf, UserPerfs } import lila.core.user.LightPerf -import lila.core.perf.Perf -import lila.core.rating.Glicko -import lila.rating.PerfExt.* import lila.rating.GlickoExt.* -import lila.core.perf.UserPerfs -import lila.core.perf.{ KeyedPerf, PuzPerf } +import lila.rating.PerfExt.* object UserPerfsExt: diff --git a/modules/rating/src/main/UserWithPerfs.scala b/modules/rating/src/main/UserWithPerfs.scala index 3cced03ed48b..c5d88094a77a 100644 --- a/modules/rating/src/main/UserWithPerfs.scala +++ b/modules/rating/src/main/UserWithPerfs.scala @@ -1,9 +1,7 @@ package lila.rating -import lila.core.user.LightPerf -import lila.core.user.WithPerf import lila.core.perf.{ UserPerfs, UserWithPerfs } -import lila.rating.PerfExt.* +import lila.core.user.{ LightPerf, WithPerf } import lila.rating.UserPerfsExt.bestRating object UserWithPerfs: diff --git a/modules/rating/src/main/glicko2/Result.scala b/modules/rating/src/main/glicko2/Result.scala index d9c046187cd1..7099c7c1b741 100644 --- a/modules/rating/src/main/glicko2/Result.scala +++ b/modules/rating/src/main/glicko2/Result.scala @@ -1,7 +1,5 @@ package lila.rating.glicko2 -import scala.jdk.CollectionConverters.* - trait Result: def getScore(player: Rating): Double diff --git a/modules/rating/src/main/package.scala b/modules/rating/src/main/package.scala index a219e82b1e21..0916636ffd40 100644 --- a/modules/rating/src/main/package.scala +++ b/modules/rating/src/main/package.scala @@ -5,8 +5,6 @@ import alleycats.Zero export lila.core.lilaism.Lilaism.{ Perf as _, *, given } export lila.common.extensions.* -import lila.rating.PerfType - type UserRankMap = Map[PerfKey, Int] type RatingFactors = Map[PerfType, RatingFactor] diff --git a/modules/rating/src/test/RatingCalculatorTest.scala b/modules/rating/src/test/RatingCalculatorTest.scala index 0ced23b282a2..8a43074414fa 100644 --- a/modules/rating/src/test/RatingCalculatorTest.scala +++ b/modules/rating/src/test/RatingCalculatorTest.scala @@ -2,10 +2,11 @@ package lila.rating import chess.{ Black, Color, White } -import glicko2.* import lila.rating.Perf.default import lila.rating.PerfExt.* +import glicko2.* + class RatingCalculatorTest extends lila.common.LilaTest: def updateRatings(wRating: Rating, bRating: Rating, winner: Option[Color]) = diff --git a/modules/relation/src/main/Env.scala b/modules/relation/src/main/Env.scala index 8c4f3986877f..5b66f4eb58d7 100644 --- a/modules/relation/src/main/Env.scala +++ b/modules/relation/src/main/Env.scala @@ -5,7 +5,6 @@ import com.softwaremill.macwire.* import play.api.Configuration import lila.common.autoconfig.{ *, given } -import lila.common.config.* import lila.core.config.* import lila.db.dsl.Coll diff --git a/modules/relation/src/main/JsonView.scala b/modules/relation/src/main/JsonView.scala index 8e574eb296ca..2e707d8f3881 100644 --- a/modules/relation/src/main/JsonView.scala +++ b/modules/relation/src/main/JsonView.scala @@ -1,6 +1,7 @@ package lila.relation import play.api.libs.json.* + import lila.common.Json.given object JsonView: diff --git a/modules/relation/src/main/RelationApi.scala b/modules/relation/src/main/RelationApi.scala index a1d9b30a8384..49ef7cf94616 100644 --- a/modules/relation/src/main/RelationApi.scala +++ b/modules/relation/src/main/RelationApi.scala @@ -5,15 +5,15 @@ import reactivemongo.api.bson.* import lila.common.Bus import lila.common.Json.given +import lila.core.relation.Relation.{ Block, Follow } +import lila.core.relation.{ Relation, Relations } +import lila.core.timeline.{ Follow as FollowUser, Propagate } +import lila.core.user.UserApi +import lila.core.userId.UserSearch import lila.db.dsl.{ *, given } import lila.db.paginator.* -import lila.core.timeline.{ Follow as FollowUser, Propagate } import lila.memo.CacheApi.* import lila.relation.BSONHandlers.given -import lila.core.relation.{ Relation, Relations } -import lila.core.relation.Relation.{ Follow, Block } -import lila.core.user.UserApi -import lila.core.userId.UserSearch final class RelationApi( repo: RelationRepo, diff --git a/modules/relation/src/main/RelationRepo.scala b/modules/relation/src/main/RelationRepo.scala index 0637d3a59f8c..47b6fdf6ab33 100644 --- a/modules/relation/src/main/RelationRepo.scala +++ b/modules/relation/src/main/RelationRepo.scala @@ -2,9 +2,9 @@ package lila.relation import reactivemongo.api.bson.* -import lila.core.relation.Relation.{ Follow, Block } -import lila.db.dsl.{ *, given } +import lila.core.relation.Relation.{ Block, Follow } import lila.core.userId.UserSearch +import lila.db.dsl.{ *, given } final private class RelationRepo(colls: Colls, userRepo: lila.core.user.UserRepo)(using Executor): diff --git a/modules/relation/src/main/RelationStream.scala b/modules/relation/src/main/RelationStream.scala index 9063fd22e353..06fac981a254 100644 --- a/modules/relation/src/main/RelationStream.scala +++ b/modules/relation/src/main/RelationStream.scala @@ -8,7 +8,6 @@ import lila.db.dsl.{ *, given } final class RelationStream(colls: Colls)(using akka.stream.Materializer): import RelationStream.* - import RelationRepo.given private val coll = colls.relation diff --git a/modules/relation/src/main/ui/RelationUi.scala b/modules/relation/src/main/ui/RelationUi.scala index 5ba6e197671c..9538137a25c0 100644 --- a/modules/relation/src/main/ui/RelationUi.scala +++ b/modules/relation/src/main/ui/RelationUi.scala @@ -3,9 +3,10 @@ package ui import scalalib.paginator.Paginator +import lila.core.perf.UserWithPerfs import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.perf.UserWithPerfs final class RelationUi(helpers: Helpers): import helpers.{ *, given } @@ -42,7 +43,7 @@ final class RelationUi(helpers: Helpers): )(trans.site.blocked()) case _ => emptyFrag - private val dataHoverText = data("hover-text") + data("hover-text") def actions( user: lila.core.LightUser, diff --git a/modules/relay/src/main/Env.scala b/modules/relay/src/main/Env.scala index d63edf02cae0..c3d3a1ae0a83 100644 --- a/modules/relay/src/main/Env.scala +++ b/modules/relay/src/main/Env.scala @@ -4,15 +4,14 @@ import akka.actor.* import com.softwaremill.macwire.* import com.softwaremill.tagging.* import play.api.libs.ws.StandaloneWSClient +import scalalib.paginator.Paginator import scala.util.matching.Regex import lila.core.config.* import lila.memo.SettingStore import lila.memo.SettingStore.Formable.given -import lila.relay.RelayTour.ActiveWithSomeRounds -import scalalib.paginator.Paginator -import lila.relay.RelayTour.WithLastRound +import lila.relay.RelayTour.{ ActiveWithSomeRounds, WithLastRound } @Module final class Env( diff --git a/modules/relay/src/main/JsonView.scala b/modules/relay/src/main/JsonView.scala index a51032800300..8689fc0ee02a 100644 --- a/modules/relay/src/main/JsonView.scala +++ b/modules/relay/src/main/JsonView.scala @@ -2,15 +2,14 @@ package lila.relay import play.api.libs.json.* import scalalib.Json.paginatorWriteNoNbResults +import scalalib.paginator.Paginator import lila.common.Json.given import lila.core.config.BaseUrl +import lila.core.id.ImageId import lila.memo.PicfitUrl +import lila.relay.RelayTour.{ ActiveWithSomeRounds, WithLastRound, WithRounds } import lila.study.ChapterPreview -import lila.core.id.ImageId -import lila.relay.RelayTour.{ WithRounds, WithLastRound, ActiveWithSomeRounds } -import scalalib.paginator.Paginator -import geny.Generator.Action final class JsonView( baseUrl: BaseUrl, diff --git a/modules/relay/src/main/RelayApi.scala b/modules/relay/src/main/RelayApi.scala index ac097dbc71a4..737f43d6d5aa 100644 --- a/modules/relay/src/main/RelayApi.scala +++ b/modules/relay/src/main/RelayApi.scala @@ -5,21 +5,21 @@ import alleycats.Zero import play.api.libs.json.* import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } -import lila.memo.{ CacheApi, PicfitApi } -import lila.relay.RelayRound.{ WithTour, Sync } import lila.core.perm.Granter import lila.core.study.data.StudyName +import lila.db.dsl.{ *, given } +import lila.memo.{ CacheApi, PicfitApi } +import lila.relay.RelayRound.{ Sync, WithTour } import lila.study.{ Settings, Study, StudyApi, StudyId, StudyMaker, - StudyRepo, - StudyTopic, StudyMember, - StudyMembers + StudyMembers, + StudyRepo, + StudyTopic } final class RelayApi( diff --git a/modules/relay/src/main/RelayFetch.scala b/modules/relay/src/main/RelayFetch.scala index 0302a4c849a8..3446e8cb1b29 100644 --- a/modules/relay/src/main/RelayFetch.scala +++ b/modules/relay/src/main/RelayFetch.scala @@ -8,14 +8,14 @@ import io.mola.galimatias.URL import play.api.libs.json.* import scalalib.model.Seconds -import lila.core.lilaism.LilaInvalid import lila.common.LilaScheduler +import lila.core.lilaism.LilaInvalid import lila.game.{ GameRepo, PgnDump } import lila.memo.CacheApi +import lila.relay.RelayFormat.CanProxy +import lila.relay.RelayRound.Sync import lila.study.{ MultiPgn, StudyPgnImport } import lila.tree.Node.Comments -import lila.relay.RelayRound.Sync -import lila.relay.RelayFormat.CanProxy final private class RelayFetch( sync: RelaySync, diff --git a/modules/relay/src/main/RelayFidePlayerApi.scala b/modules/relay/src/main/RelayFidePlayerApi.scala index 795182e43c12..82f2bba21c7e 100644 --- a/modules/relay/src/main/RelayFidePlayerApi.scala +++ b/modules/relay/src/main/RelayFidePlayerApi.scala @@ -3,8 +3,8 @@ package lila.relay import chess.ByColor import chess.format.pgn.{ Tag, Tags } +import lila.core.fide.{ FideTC, Player } import lila.db.dsl.* -import lila.core.fide.{ Player, FideTC } final private class RelayFidePlayerApi(guessPlayer: lila.core.fide.GuessPlayer)(using Executor): diff --git a/modules/relay/src/main/RelayFormat.scala b/modules/relay/src/main/RelayFormat.scala index 99717ca87af0..ffd25da47544 100644 --- a/modules/relay/src/main/RelayFormat.scala +++ b/modules/relay/src/main/RelayFormat.scala @@ -4,7 +4,6 @@ import chess.format.pgn.PgnStr import com.softwaremill.tagging.* import io.mola.galimatias.URL import play.api.libs.json.* -import play.api.libs.ws.DefaultBodyReadables.* import play.api.libs.ws.{ DefaultWSProxyServer, StandaloneWSClient, @@ -14,8 +13,8 @@ import play.api.libs.ws.{ import scala.util.matching.Regex -import lila.core.lilaism.{ LilaInvalid, LilaException } import lila.core.config.{ Credentials, HostPort } +import lila.core.lilaism.{ LilaException, LilaInvalid } import lila.memo.CacheApi.* import lila.memo.{ CacheApi, SettingStore } import lila.study.MultiPgn diff --git a/modules/relay/src/main/RelayGame.scala b/modules/relay/src/main/RelayGame.scala index 0a033b8e44ed..217f9e74f427 100644 --- a/modules/relay/src/main/RelayGame.scala +++ b/modules/relay/src/main/RelayGame.scala @@ -1,10 +1,10 @@ package lila.relay +import chess.Outcome import chess.format.pgn.{ Tag, TagType, Tags } -import lila.study.{ MultiPgn, StudyPgnImport, PgnDump } +import lila.study.{ MultiPgn, PgnDump } import lila.tree.Root -import chess.Outcome case class RelayGame( tags: Tags, @@ -64,7 +64,7 @@ private object RelayGame: ) import scalalib.Iso - import chess.format.pgn.{ InitialComments, Pgn } + import chess.format.pgn.InitialComments val iso: Iso[RelayGames, MultiPgn] = import lila.study.PgnDump.WithFlags given WithFlags = WithFlags( diff --git a/modules/relay/src/main/RelayGroup.scala b/modules/relay/src/main/RelayGroup.scala index c2b1b812493d..1e7fedd4f893 100644 --- a/modules/relay/src/main/RelayGroup.scala +++ b/modules/relay/src/main/RelayGroup.scala @@ -1,7 +1,7 @@ package lila.relay -import scalalib.ThreadLocalRandom import reactivemongo.api.bson.Macros.Annotations.Key +import scalalib.ThreadLocalRandom case class RelayGroup(@Key("_id") id: RelayGroup.Id, name: RelayGroup.Name, tours: List[RelayTourId]) diff --git a/modules/relay/src/main/RelayInputSanity.scala b/modules/relay/src/main/RelayInputSanity.scala index 22f3f6c97c71..14db5c045452 100644 --- a/modules/relay/src/main/RelayInputSanity.scala +++ b/modules/relay/src/main/RelayInputSanity.scala @@ -2,8 +2,6 @@ package lila.relay import chess.format.Fen -import lila.study.* - /* Try to detect several ways for the input to be wrong */ private object RelayInputSanity: diff --git a/modules/relay/src/main/RelayLeaderboard.scala b/modules/relay/src/main/RelayLeaderboard.scala index 8cf5c6c19a6a..69b22cd68247 100644 --- a/modules/relay/src/main/RelayLeaderboard.scala +++ b/modules/relay/src/main/RelayLeaderboard.scala @@ -2,8 +2,8 @@ package lila.relay import chess.{ Elo, FideId, Outcome, PlayerName, PlayerTitle } -import lila.db.dsl.{ *, given } import lila.core.fide.Federation +import lila.db.dsl.{ *, given } import lila.memo.CacheApi import lila.study.ChapterRepo diff --git a/modules/relay/src/main/RelayPager.scala b/modules/relay/src/main/RelayPager.scala index fc9b33dce434..0e47ae462115 100644 --- a/modules/relay/src/main/RelayPager.scala +++ b/modules/relay/src/main/RelayPager.scala @@ -1,6 +1,7 @@ package lila.relay import scalalib.paginator.{ AdapterLike, Paginator } + import lila.db.dsl.{ *, given } import lila.memo.CacheApi import lila.relay.RelayTour.WithLastRound diff --git a/modules/relay/src/main/RelayPlayerTour.scala b/modules/relay/src/main/RelayPlayerTour.scala index 8fa9185e18d7..7ca24f0d2b4c 100644 --- a/modules/relay/src/main/RelayPlayerTour.scala +++ b/modules/relay/src/main/RelayPlayerTour.scala @@ -1,8 +1,9 @@ package lila.relay import scalalib.paginator.Paginator -import lila.db.dsl.{ *, given } + import lila.core.fide.Player +import lila.db.dsl.{ *, given } import lila.study.ChapterRepo final class RelayPlayerTour( diff --git a/modules/relay/src/main/RelayPlayers.scala b/modules/relay/src/main/RelayPlayers.scala index 45cdcc78cf8e..5a17334ff80d 100644 --- a/modules/relay/src/main/RelayPlayers.scala +++ b/modules/relay/src/main/RelayPlayers.scala @@ -4,7 +4,7 @@ import chess.format.pgn.{ Tag, Tags } import chess.{ Elo, FideId, PlayerName, PlayerTitle } import play.api.data.Forms.* -import lila.core.fide.{ Player, PlayerToken, diacritics } +import lila.core.fide.{ PlayerToken, diacritics } // used to change names and ratings of broadcast players private case class RelayPlayer( diff --git a/modules/relay/src/main/RelayPush.scala b/modules/relay/src/main/RelayPush.scala index bdcdb12df6f7..405fb3e53d5d 100644 --- a/modules/relay/src/main/RelayPush.scala +++ b/modules/relay/src/main/RelayPush.scala @@ -4,10 +4,11 @@ import akka.actor.* import akka.pattern.after import chess.format.pgn.{ Parser, PgnStr, San, Std, Tags } import chess.{ ErrorStr, Game, Replay, Square } -import scala.concurrent.duration.* import scalalib.actor.AsyncActorSequencers -import lila.study.{ MultiPgn, StudyPgnImport, ChapterPreviewApi } +import scala.concurrent.duration.* + +import lila.study.{ ChapterPreviewApi, MultiPgn, StudyPgnImport } final class RelayPush( sync: RelaySync, diff --git a/modules/relay/src/main/RelayRound.scala b/modules/relay/src/main/RelayRound.scala index c655e1ae1798..5fcc759a8de7 100644 --- a/modules/relay/src/main/RelayRound.scala +++ b/modules/relay/src/main/RelayRound.scala @@ -1,11 +1,11 @@ package lila.relay -import scalalib.ThreadLocalRandom +import io.mola.galimatias.URL import reactivemongo.api.bson.Macros.Annotations.Key - +import scalalib.ThreadLocalRandom import scalalib.model.Seconds + import lila.study.Study -import io.mola.galimatias.URL case class RelayRound( /* Same as the Study id it refers to */ diff --git a/modules/relay/src/main/RelayRoundForm.scala b/modules/relay/src/main/RelayRoundForm.scala index baf87aa94d62..d0df386dc26d 100644 --- a/modules/relay/src/main/RelayRoundForm.scala +++ b/modules/relay/src/main/RelayRoundForm.scala @@ -1,16 +1,16 @@ package lila.relay -import scala.util.Try import io.mola.galimatias.URL +import play.api.Mode import play.api.data.* import play.api.data.Forms.* import play.api.data.format.Formatter -import play.api.Mode import scalalib.model.Seconds -import lila.common.Form.{ cleanText, into, stringIn, formatter } -import lila.core.perm.Granter +import scala.util.Try +import lila.common.Form.{ cleanText, formatter, into, stringIn } +import lila.core.perm.Granter import lila.relay.RelayRound.Sync import lila.relay.RelayRound.Sync.Upstream @@ -144,10 +144,6 @@ object RelayRoundForm: case class GameIds(ids: List[GameId]) - private def toGameIds(ids: String): Option[GameIds] = - val list = ids.split(' ').view.flatMap(i => GameId.from(i.trim)).toList - (list.sizeIs > 0 && list.sizeIs <= RelayFetch.maxChapters.value).option(GameIds(list)) - private def cleanUrl(source: String)(using mode: Mode): Option[URL] = for url <- Try(URL.parse(source)).toOption @@ -163,9 +159,6 @@ object RelayRoundForm: url <- if !validSourcePort(url) then Left("The source URL cannot specify a port") else Right(url) yield url - private def cleanUrls(source: String)(using mode: Mode): Option[List[URL]] = - source.linesIterator.toList.flatMap(cleanUrl).some.filter(_.nonEmpty) - private val validPorts = Set(-1, 80, 443, 8080, 8491) private def validSourcePort(url: URL)(using mode: Mode): Boolean = mode.notProd || validPorts(url.port) diff --git a/modules/relay/src/main/RelayStatsApi.scala b/modules/relay/src/main/RelayStatsApi.scala index ea963452496c..2021c8f17d34 100644 --- a/modules/relay/src/main/RelayStatsApi.scala +++ b/modules/relay/src/main/RelayStatsApi.scala @@ -1,9 +1,9 @@ package lila.relay -import lila.db.dsl.{ *, given } -import reactivemongo.api.bson.BSONInteger import scalalib.cache.ExpireSetMemo +import lila.db.dsl.{ *, given } + object RelayStats: type Minute = Int type Crowd = Int @@ -14,7 +14,6 @@ final class RelayStatsApi(roundRepo: RelayRoundRepo, colls: RelayColls)(using sc Executor ): import RelayStats.* - import BSONHandlers.given // on measurement by minute at most; the storage depends on it. scheduler.scheduleWithFixedDelay(2 minutes, 2 minutes)(() => record()) diff --git a/modules/relay/src/main/RelayTour.scala b/modules/relay/src/main/RelayTour.scala index 8a3be5508a83..dce35b084ee5 100644 --- a/modules/relay/src/main/RelayTour.scala +++ b/modules/relay/src/main/RelayTour.scala @@ -3,9 +3,8 @@ package lila.relay import reactivemongo.api.bson.Macros.Annotations.Key import lila.core.i18n.Language -import lila.core.misc.PicfitUrl import lila.core.id.ImageId -import java.time.LocalDate +import lila.core.misc.PicfitUrl case class RelayTour( @Key("_id") id: RelayTourId, diff --git a/modules/relay/src/main/RelayTourForm.scala b/modules/relay/src/main/RelayTourForm.scala index 7a792c8fdba2..43e0ba06575c 100644 --- a/modules/relay/src/main/RelayTourForm.scala +++ b/modules/relay/src/main/RelayTourForm.scala @@ -3,11 +3,9 @@ package lila.relay import play.api.data.* import play.api.data.Forms.* -import lila.common.Form.{ cleanText, formatter, into, numberIn, ISODate } +import lila.common.Form.{ cleanText, formatter, into, numberIn } import lila.core.perm.Granter -import lila.core.i18n.I18nKey.streamer - final class RelayTourForm(langList: lila.core.i18n.LangList): import RelayTourForm.* diff --git a/modules/relay/src/main/RelayTourStream.scala b/modules/relay/src/main/RelayTourStream.scala index 149d5dfd0045..58aacc72cf1f 100644 --- a/modules/relay/src/main/RelayTourStream.scala +++ b/modules/relay/src/main/RelayTourStream.scala @@ -5,7 +5,7 @@ import play.api.libs.json.* import reactivemongo.akkastream.cursorProducer import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } +import lila.db.dsl.* final class RelayTourStream( colls: RelayColls, diff --git a/modules/relay/src/main/RelayUpdatePlan.scala b/modules/relay/src/main/RelayUpdatePlan.scala index 5e9b1df8de18..1aee79b887e9 100644 --- a/modules/relay/src/main/RelayUpdatePlan.scala +++ b/modules/relay/src/main/RelayUpdatePlan.scala @@ -1,7 +1,6 @@ package lila.relay import lila.study.Chapter -import lila.study.Chapter.Order object RelayUpdatePlan: diff --git a/modules/relay/src/main/ui/FormUi.scala b/modules/relay/src/main/ui/FormUi.scala index bbedd9b0f8db..7645a4e1e8f4 100644 --- a/modules/relay/src/main/ui/FormUi.scala +++ b/modules/relay/src/main/ui/FormUi.scala @@ -1,11 +1,10 @@ package lila.relay package ui - -import scalalib.paginator.Paginator +import play.api.data.Form import lila.ui.* + import ScalatagsTemplate.{ *, given } -import play.api.data.Form case class FormNavigation( group: Option[RelayGroup.WithTours], diff --git a/modules/relay/src/main/ui/RelayTourUi.scala b/modules/relay/src/main/ui/RelayTourUi.scala index 92182daee011..8df46d4315bc 100644 --- a/modules/relay/src/main/ui/RelayTourUi.scala +++ b/modules/relay/src/main/ui/RelayTourUi.scala @@ -1,12 +1,13 @@ package lila.relay package ui -import lila.ui.* -import ScalatagsTemplate.{ *, given } import scalalib.paginator.Paginator -import lila.relay.RelayTour.WithLastRound + import lila.core.LightUser -import play.api.libs.json.Json +import lila.relay.RelayTour.WithLastRound +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class RelayTourUi(helpers: Helpers, ui: RelayUi): import helpers.{ *, given } diff --git a/modules/relay/src/main/ui/RelayUi.scala b/modules/relay/src/main/ui/RelayUi.scala index 03d8dc70f909..89fdc20ef4ee 100644 --- a/modules/relay/src/main/ui/RelayUi.scala +++ b/modules/relay/src/main/ui/RelayUi.scala @@ -2,13 +2,12 @@ package lila.relay package ui import play.api.libs.json.* -import play.api.data.Form -import scalalib.paginator.Paginator -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.common.Json.given import lila.core.id.ImageId +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class RelayUi(helpers: Helpers)( picfitUrl: lila.core.misc.PicfitUrl, diff --git a/modules/relay/src/test/RelayPlanUpdateFixtures.scala b/modules/relay/src/test/RelayPlanUpdateFixtures.scala index 94a535edab2a..3f2e71b67b6b 100644 --- a/modules/relay/src/test/RelayPlanUpdateFixtures.scala +++ b/modules/relay/src/test/RelayPlanUpdateFixtures.scala @@ -1,10 +1,10 @@ package lila.relay -import chess.format.pgn.PgnStr +import chess.format.pgn.{ PgnStr, Tags } + +import lila.core.study.data.StudyChapterName import lila.study.{ Chapter, MultiPgn } import lila.tree.Root -import lila.core.study.data.StudyChapterName -import chess.format.pgn.Tags private object RelayPlanUpdateFixtures: diff --git a/modules/report/src/main/AutoAnalysis.scala b/modules/report/src/main/AutoAnalysis.scala index 41ec4b28c684..7f69eda86136 100644 --- a/modules/report/src/main/AutoAnalysis.scala +++ b/modules/report/src/main/AutoAnalysis.scala @@ -1,6 +1,6 @@ package lila.report -import lila.core.game.{ GameRepo, GameApi } +import lila.core.game.{ GameApi, GameRepo } final class AutoAnalysis(gameRepo: GameRepo, gameApi: GameApi)(using ec: Executor, scheduler: Scheduler): diff --git a/modules/report/src/main/Env.scala b/modules/report/src/main/Env.scala index 2d41c3b1eb01..b72d1e4c774a 100644 --- a/modules/report/src/main/Env.scala +++ b/modules/report/src/main/Env.scala @@ -2,10 +2,8 @@ package lila.report import akka.actor.* import com.softwaremill.macwire.* -import play.api.Configuration import lila.core.config.* -import lila.core.report.SuspectId @Module final class Env( diff --git a/modules/report/src/main/Reason.scala b/modules/report/src/main/Reason.scala index c03bc9cafad8..3508ef05fe9f 100644 --- a/modules/report/src/main/Reason.scala +++ b/modules/report/src/main/Reason.scala @@ -1,6 +1,7 @@ package lila.report import scalalib.Iso + import lila.core.user.Me enum Reason: diff --git a/modules/report/src/main/Report.scala b/modules/report/src/main/Report.scala index 4abc4537bea8..b5ff2631b03b 100644 --- a/modules/report/src/main/Report.scala +++ b/modules/report/src/main/Report.scala @@ -1,12 +1,12 @@ package lila.report -import scalalib.ThreadLocalRandom import reactivemongo.api.bson.Macros.Annotations.Key +import scalalib.ThreadLocalRandom +import lila.core.id.ReportId +import lila.core.perf.UserWithPerfs import lila.core.report.SuspectId import lila.core.userId.ModId -import lila.core.perf.UserWithPerfs -import lila.core.id.ReportId case class Report( @Key("_id") id: ReportId, // also the url slug diff --git a/modules/report/src/main/ReportApi.scala b/modules/report/src/main/ReportApi.scala index 693d2946525e..4acd9658a15e 100644 --- a/modules/report/src/main/ReportApi.scala +++ b/modules/report/src/main/ReportApi.scala @@ -3,11 +3,11 @@ package lila.report import com.softwaremill.macwire.* import lila.common.Bus -import lila.db.dsl.{ *, given } -import lila.memo.CacheApi.* +import lila.core.id.ReportId import lila.core.report.SuspectId import lila.core.userId.ModId -import lila.core.id.ReportId +import lila.db.dsl.{ *, given } +import lila.memo.CacheApi.* import lila.report.Room.Scores final class ReportApi( diff --git a/modules/report/src/main/ReportForm.scala b/modules/report/src/main/ReportForm.scala index 1fa72ff33e52..cc004d05b654 100644 --- a/modules/report/src/main/ReportForm.scala +++ b/modules/report/src/main/ReportForm.scala @@ -4,10 +4,10 @@ import play.api.data.* import play.api.data.Forms.* import play.api.data.validation.* -import lila.core.config.NetDomain +import lila.common.Form.cleanNonEmptyText import lila.core.LightUser +import lila.core.config.NetDomain import lila.core.report.SuspectId -import lila.common.Form.cleanNonEmptyText final private[report] class ReportForm(lightUserAsync: LightUser.Getter)(using domain: NetDomain): val cheatLinkConstraint: Constraint[ReportSetup] = Constraint("constraints.cheatgamelink"): setup => diff --git a/modules/report/src/main/ReportThresholds.scala b/modules/report/src/main/ReportThresholds.scala index defad95d6da0..ac6f5ccc6a57 100644 --- a/modules/report/src/main/ReportThresholds.scala +++ b/modules/report/src/main/ReportThresholds.scala @@ -3,11 +3,11 @@ package lila.report import play.api.data.Form import play.api.data.Forms.{ single, text } import reactivemongo.api.bson.BSONHandler - import scalalib.Iso -import lila.memo.SettingStore.{ Formable, StringReader } + import lila.core.data.Ints import lila.core.report.ScoreThresholds +import lila.memo.SettingStore.{ Formable, StringReader } private case class Thresholds(score: () => ScoreThresholds, discord: () => Int) diff --git a/modules/report/src/main/Room.scala b/modules/report/src/main/Room.scala index ff6f0b97fd92..1f1d0647a6e5 100644 --- a/modules/report/src/main/Room.scala +++ b/modules/report/src/main/Room.scala @@ -1,7 +1,6 @@ package lila.report import cats.derived.* - import scalalib.Iso enum Room derives Eq: diff --git a/modules/report/src/main/model.scala b/modules/report/src/main/model.scala index a63699c3ca5e..3fa5c2b77403 100644 --- a/modules/report/src/main/model.scala +++ b/modules/report/src/main/model.scala @@ -1,8 +1,8 @@ package lila.report import lila.core.report.SuspectId -import lila.core.userId.{ ModId, OpaqueUserId } import lila.core.user.WithPerf +import lila.core.userId.{ ModId, OpaqueUserId } case class Mod(user: User) extends AnyVal: def id = user.id.into(ModId) diff --git a/modules/report/src/main/ui/ReportUi.scala b/modules/report/src/main/ui/ReportUi.scala index 8ada7c118494..5251bf834549 100644 --- a/modules/report/src/main/ui/ReportUi.scala +++ b/modules/report/src/main/ui/ReportUi.scala @@ -1,10 +1,12 @@ package lila.report package ui +import play.api.data.Form + +import lila.core.i18n.{ I18nKey as trans, Translate } import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.i18n.{ Translate, I18nKey as trans } -import play.api.data.Form object ReportUi: diff --git a/modules/room/src/main/RoomSocket.scala b/modules/room/src/main/RoomSocket.scala index d7af0f7edef9..a406ac47cbe9 100644 --- a/modules/room/src/main/RoomSocket.scala +++ b/modules/room/src/main/RoomSocket.scala @@ -1,17 +1,15 @@ package lila.room import play.api.libs.json.* -import scalalib.actor.SyncActorMap -import scalalib.actor.SyncActor +import scalalib.actor.{ SyncActor, SyncActorMap } +import lila.common.Json.given import lila.core.chat.{ BusChan, ChatApi, TimeoutScope } import lila.core.shutup.PublicSource -import lila.log.Logger -import lila.core.socket.{ protocol as P, * } -import lila.core.socket.{ makeMessage } -import lila.common.Json.given - +import lila.core.socket.* +import lila.core.socket.protocol as P import lila.core.user.FlairGet +import lila.log.Logger object RoomSocket: diff --git a/modules/round/src/main/ApiMoveStream.scala b/modules/round/src/main/ApiMoveStream.scala index db3ee82650dd..6f84623c627d 100644 --- a/modules/round/src/main/ApiMoveStream.scala +++ b/modules/round/src/main/ApiMoveStream.scala @@ -8,7 +8,7 @@ import play.api.libs.json.* import lila.common.Bus import lila.common.Json.given import lila.core.game.FinishGame -import lila.game.{ Game, GameRepo } +import lila.game.GameRepo import lila.game.actorApi.MoveGameEvent final class ApiMoveStream( diff --git a/modules/round/src/main/CorresAlarm.scala b/modules/round/src/main/CorresAlarm.scala index 39d129dd3014..0fd86bd7b728 100644 --- a/modules/round/src/main/CorresAlarm.scala +++ b/modules/round/src/main/CorresAlarm.scala @@ -5,9 +5,8 @@ import reactivemongo.akkastream.cursorProducer import reactivemongo.api.bson.* import lila.common.{ Bus, LilaScheduler, LilaStream } -import lila.db.dsl.{ *, given } - import lila.core.user.LightUserApi +import lila.db.dsl.{ *, given } final private class CorresAlarm( coll: Coll, diff --git a/modules/round/src/main/CorrespondenceEmail.scala b/modules/round/src/main/CorrespondenceEmail.scala index 088d49639553..07daa568a70c 100644 --- a/modules/round/src/main/CorrespondenceEmail.scala +++ b/modules/round/src/main/CorrespondenceEmail.scala @@ -4,10 +4,10 @@ import reactivemongo.akkastream.cursorProducer import java.time.{ Duration, LocalTime } import lila.common.{ Bus, LilaStream } -import lila.db.dsl.{ *, given } -import lila.core.game.{ GameRepo } +import lila.core.game.GameRepo import lila.core.misc.mailer.* import lila.core.notify.NotifyApi +import lila.db.dsl.{ *, given } import lila.user.UserRepo final private class CorrespondenceEmail(gameRepo: GameRepo, userRepo: UserRepo, notifyApi: NotifyApi)(using diff --git a/modules/round/src/main/Drawer.scala b/modules/round/src/main/Drawer.scala index 955700cda21b..3dcb47402a74 100644 --- a/modules/round/src/main/Drawer.scala +++ b/modules/round/src/main/Drawer.scala @@ -4,10 +4,10 @@ import chess.Centis import play.api.i18n.Lang import lila.common.Bus +import lila.core.i18n.{ I18nKey as trans, Translator, defaultLang } +import lila.game.GameExt.playerCanOfferDraw import lila.game.{ Event, Progress } -import lila.core.i18n.{ I18nKey as trans, defaultLang, Translator } import lila.pref.{ Pref, PrefApi } -import lila.game.GameExt.playerCanOfferDraw final private[round] class Drawer( messenger: Messenger, diff --git a/modules/round/src/main/Env.scala b/modules/round/src/main/Env.scala index 9cc6e0f3697d..c81a24811527 100644 --- a/modules/round/src/main/Env.scala +++ b/modules/round/src/main/Env.scala @@ -8,14 +8,13 @@ import play.api.Configuration import scala.util.matching.Regex import lila.common.autoconfig.{ *, given } -import lila.core.config.* import lila.common.{ Bus, Uptime } -import lila.game.{ Game, GameRepo, Pov } +import lila.core.config.* import lila.core.round.{ Abort, Resign } -import lila.memo.SettingStore -import lila.rating.RatingFactor -import lila.rating.PerfType import lila.core.user.{ FlairGet, FlairGetMap } +import lila.game.GameRepo +import lila.memo.SettingStore +import lila.rating.{ PerfType, RatingFactor } import lila.round.RoundGame.* @Module diff --git a/modules/round/src/main/FarmBoostDetection.scala b/modules/round/src/main/FarmBoostDetection.scala index 06e1f0e03c2e..1e725ee38ba7 100644 --- a/modules/round/src/main/FarmBoostDetection.scala +++ b/modules/round/src/main/FarmBoostDetection.scala @@ -1,9 +1,10 @@ package lila.round -import lila.core.LightUser.IsBotSync -import lila.game.{ CrosstableApi, Game, GameRepo } import chess.ByColor + +import lila.core.LightUser.IsBotSync import lila.core.perf.UserWithPerfs +import lila.game.{ CrosstableApi, GameRepo } final private class FarmBoostDetection( gameRepo: GameRepo, diff --git a/modules/round/src/main/Finisher.scala b/modules/round/src/main/Finisher.scala index 3efdedc525bf..1d11a0b8a61f 100644 --- a/modules/round/src/main/Finisher.scala +++ b/modules/round/src/main/Finisher.scala @@ -1,14 +1,14 @@ package lila.round -import chess.{ Color, ByColor, DecayingStats, Status } +import chess.{ ByColor, Color, DecayingStats, Status } import lila.common.{ Bus, Uptime } import lila.core.game.{ AbortedBy, FinishGame } -import lila.core.i18n.{ I18nKey as trans, defaultLang, Translator } -import lila.playban.PlaybanApi -import lila.user.{ User, UserApi, UserRepo } +import lila.core.i18n.{ I18nKey as trans, Translator, defaultLang } import lila.core.perf.UserWithPerfs import lila.game.GameExt.finish +import lila.playban.PlaybanApi +import lila.user.{ UserApi, UserRepo } final private class Finisher( gameRepo: lila.game.GameRepo, diff --git a/modules/round/src/main/Forecast.scala b/modules/round/src/main/Forecast.scala index 9e28c5ed691a..f3268fe93b11 100644 --- a/modules/round/src/main/Forecast.scala +++ b/modules/round/src/main/Forecast.scala @@ -6,7 +6,6 @@ import chess.{ Move, Ply } import play.api.libs.json.* import lila.common.Json.given -import lila.game.Game case class Forecast(_id: GameFullId, steps: Forecast.Steps, date: Instant): diff --git a/modules/round/src/main/GameProxy.scala b/modules/round/src/main/GameProxy.scala index 68a9a110e4a6..7dbbd590a7f3 100644 --- a/modules/round/src/main/GameProxy.scala +++ b/modules/round/src/main/GameProxy.scala @@ -1,10 +1,11 @@ package lila.round import akka.actor.{ Cancellable, Scheduler } + import scala.util.Success -import lila.game.{ GameRepo, Progress } import lila.game.GameExt.* +import lila.game.{ GameRepo, Progress } // NOT thread safe final private class GameProxy( diff --git a/modules/round/src/main/JsonView.scala b/modules/round/src/main/JsonView.scala index 142f767011c8..c4e0a96fcff7 100644 --- a/modules/round/src/main/JsonView.scala +++ b/modules/round/src/main/JsonView.scala @@ -3,19 +3,19 @@ package lila.round import chess.format.Fen import chess.{ ByColor, Clock, Color, Speed } import play.api.libs.json.* + import scala.math import lila.common.Json.given -import lila.core.data.Preload import lila.core.LightUser -import lila.game.JsonView.given -import lila.core.game.{ Player as GamePlayer } -import lila.pref.Pref -import lila.core.user.{ GameUser, GameUsers } -import lila.core.user.WithPerf +import lila.core.data.Preload +import lila.core.game.Player as GamePlayer import lila.core.net.ApiVersion import lila.core.perf.KeyedPerf +import lila.core.user.{ GameUser, GameUsers, WithPerf } import lila.game.GameExt.moveTimes +import lila.game.JsonView.given +import lila.pref.Pref import lila.round.RoundGame.* final class JsonView( diff --git a/modules/round/src/main/Messenger.scala b/modules/round/src/main/Messenger.scala index 86436d7c8b92..6368a138eff8 100644 --- a/modules/round/src/main/Messenger.scala +++ b/modules/round/src/main/Messenger.scala @@ -1,7 +1,6 @@ package lila.round import lila.chat.{ ChatApi, ChatTimeout } -import lila.game.Game import lila.core.shutup.PublicSource final class Messenger(api: ChatApi): diff --git a/modules/round/src/main/Moretimer.scala b/modules/round/src/main/Moretimer.scala index ce93a8abc39c..53961676fa8b 100644 --- a/modules/round/src/main/Moretimer.scala +++ b/modules/round/src/main/Moretimer.scala @@ -3,10 +3,10 @@ package lila.round import chess.{ ByColor, Color } import lila.core.data.Preload -import lila.game.{ Event, Game, Pov, Progress } -import lila.pref.{ Pref, PrefApi } import lila.core.round.ClientError import lila.game.GameExt.withClock +import lila.game.{ Event, Progress } +import lila.pref.{ Pref, PrefApi } final class Moretimer( messenger: Messenger, diff --git a/modules/round/src/main/PerfsUpdater.scala b/modules/round/src/main/PerfsUpdater.scala index e8eb66b822dc..ad49ff19feb1 100644 --- a/modules/round/src/main/PerfsUpdater.scala +++ b/modules/round/src/main/PerfsUpdater.scala @@ -2,13 +2,11 @@ package lila.round import chess.{ ByColor, Color, Speed } -import lila.rating.{ Glicko, Perf, RatingFactors, RatingRegulator, glicko2, UserPerfs } -import lila.user.{ RankingApi, User, UserApi } -import lila.rating.PerfType import lila.core.perf.{ UserPerfs, UserWithPerfs } -import lila.rating.PerfExt.toRating -import lila.rating.PerfExt.addOrReset import lila.rating.GlickoExt.average +import lila.rating.PerfExt.{ addOrReset, toRating } +import lila.rating.{ Glicko, PerfType, RatingFactors, RatingRegulator, glicko2 } +import lila.user.{ RankingApi, UserApi } final class PerfsUpdater( gameRepo: lila.game.GameRepo, diff --git a/modules/round/src/main/Player.scala b/modules/round/src/main/Player.scala index b2e6bcd431cd..7a01c86e6bb2 100644 --- a/modules/round/src/main/Player.scala +++ b/modules/round/src/main/Player.scala @@ -7,10 +7,10 @@ import chess.{ Centis, Clock, ErrorStr, MoveMetrics, MoveOrDrop, Status } import java.util.concurrent.TimeUnit import lila.common.Bus -import lila.game.actorApi.MoveGameEvent -import lila.game.{ Progress, UciMemo } import lila.core.round.* import lila.game.GameExt.applyMove +import lila.game.actorApi.MoveGameEvent +import lila.game.{ Progress, UciMemo } import lila.round.RoundGame.* final private class Player( diff --git a/modules/round/src/main/RecentTvGames.scala b/modules/round/src/main/RecentTvGames.scala index 124be8a9d686..8bd422bc2035 100644 --- a/modules/round/src/main/RecentTvGames.scala +++ b/modules/round/src/main/RecentTvGames.scala @@ -1,6 +1,6 @@ package lila.round -import lila.game.{ Game, GameRepo } +import lila.game.GameRepo final class RecentTvGames(gameRepo: GameRepo)(using Executor): diff --git a/modules/round/src/main/Rematcher.scala b/modules/round/src/main/Rematcher.scala index 6352249d1a1c..35804db43896 100644 --- a/modules/round/src/main/Rematcher.scala +++ b/modules/round/src/main/Rematcher.scala @@ -3,13 +3,13 @@ package lila.round import chess.format.Fen import chess.variant.* import chess.{ ByColor, Clock, Color as ChessColor, Game as ChessGame, Ply, Situation } +import scalalib.cache.ExpireSetMemo import lila.common.Bus -import lila.game.{ AnonCookie, Event, Rematches } -import lila.core.game.{ IdGenerator, GameRepo } -import lila.core.i18n.{ I18nKey as trans, defaultLang, Translator } -import scalalib.cache.ExpireSetMemo +import lila.core.game.{ GameRepo, IdGenerator } +import lila.core.i18n.{ I18nKey as trans, Translator, defaultLang } import lila.core.user.{ GameUsers, UserApi } +import lila.game.{ AnonCookie, Event, Rematches } import ChessColor.White diff --git a/modules/round/src/main/RoundAsyncActor.scala b/modules/round/src/main/RoundAsyncActor.scala index 4e692525344d..5cccb688f801 100644 --- a/modules/round/src/main/RoundAsyncActor.scala +++ b/modules/round/src/main/RoundAsyncActor.scala @@ -3,14 +3,14 @@ package lila.round import alleycats.Zero import chess.{ Black, Centis, Color, White } import play.api.libs.json.* - -import lila.game.{ Event, GameRepo, Player as GamePlayer, Progress } import scalalib.actor.AsyncActor + import lila.core.round.* -import lila.room.RoomSocket.{ Protocol as RP, * } -import lila.core.socket.{ GetVersion, makeMessage, SocketSend, SocketVersion, userLag } +import lila.core.socket.{ GetVersion, SocketSend, SocketVersion, makeMessage, userLag } import lila.core.user.FlairGet import lila.game.GameExt.* +import lila.game.{ Event, GameRepo, Player as GamePlayer, Progress } +import lila.room.RoomSocket.{ Protocol as RP, * } import lila.round.RoundGame.* final private class RoundAsyncActor( diff --git a/modules/round/src/main/RoundGame.scala b/modules/round/src/main/RoundGame.scala index fd8aae2faa63..fc3884817467 100644 --- a/modules/round/src/main/RoundGame.scala +++ b/modules/round/src/main/RoundGame.scala @@ -2,7 +2,7 @@ package lila.round import chess.{ Centis, Color } -import lila.core.game.{ Source, Player } +import lila.core.game.{ Player, Source } object RoundGame: diff --git a/modules/round/src/main/RoundMobile.scala b/modules/round/src/main/RoundMobile.scala index 3c88439ef338..d58df849e913 100644 --- a/modules/round/src/main/RoundMobile.scala +++ b/modules/round/src/main/RoundMobile.scala @@ -1,13 +1,12 @@ package lila.round -import chess.{ ByColor, Color } +import chess.Color import play.api.libs.json.{ JsArray, JsObject, Json } import lila.chat.Chat import lila.common.Json.given -import lila.core.data.Preload import lila.core.LightUser -import lila.game.JsonView.given +import lila.core.data.Preload import lila.pref.Pref import lila.round.RoundGame.* diff --git a/modules/round/src/main/RoundNotifier.scala b/modules/round/src/main/RoundNotifier.scala index 637b5577329a..ee4b9577fefb 100644 --- a/modules/round/src/main/RoundNotifier.scala +++ b/modules/round/src/main/RoundNotifier.scala @@ -1,8 +1,8 @@ package lila.round -import lila.core.timeline.{ GameEnd as TLGameEnd, Propagate } -import lila.core.notify.{ GameEnd, NotifyApi } import lila.core.chess.Win +import lila.core.notify.{ GameEnd, NotifyApi } +import lila.core.timeline.{ GameEnd as TLGameEnd, Propagate } final private class RoundNotifier( isUserPresent: (Game, UserId) => Fu[Boolean], diff --git a/modules/round/src/main/RoundSocket.scala b/modules/round/src/main/RoundSocket.scala index bd5da054031d..48681e5e5a50 100644 --- a/modules/round/src/main/RoundSocket.scala +++ b/modules/round/src/main/RoundSocket.scala @@ -5,20 +5,19 @@ import chess.format.Uci import chess.{ Black, Centis, Color, MoveMetrics, Speed, White } import play.api.libs.json.* import reactivemongo.api.Cursor +import scalalib.actor.AsyncActorConcMap import lila.chat.BusChan import lila.common.Json.given import lila.common.{ Bus, Lilakka } -import lila.game.{ Event, Game, Pov } -import scalalib.actor.AsyncActorConcMap -import lila.core.misc.map.{ Exists, Tell, TellAll, TellIfExists, TellMany } import lila.core.game.TvSelect +import lila.core.misc.map.{ Exists, Tell, TellAll, TellIfExists, TellMany } +import lila.core.net.IpAddress import lila.core.round.* import lila.core.socket.remote.TellSriIn -import lila.room.RoomSocket.{ Protocol as RP, * } import lila.core.socket.{ protocol as P, * } -import lila.core.net.IpAddress import lila.core.user.FlairGet +import lila.room.RoomSocket.{ Protocol as RP, * } final class RoundSocket( socketKit: ParallelSocketKit, diff --git a/modules/round/src/main/SelfReport.scala b/modules/round/src/main/SelfReport.scala index ffe7c59604fd..f34d63f17238 100644 --- a/modules/round/src/main/SelfReport.scala +++ b/modules/round/src/main/SelfReport.scala @@ -7,8 +7,8 @@ import scala.util.matching.Regex import lila.core.net.{ IpAddress, IpAddressStr } import lila.memo.SettingStore -import lila.user.UserApi import lila.rating.UserPerfsExt.bestRating +import lila.user.UserApi final class SelfReport( roundApi: lila.core.round.RoundApi, diff --git a/modules/round/src/main/StepBuilder.scala b/modules/round/src/main/StepBuilder.scala index 290259cb1de2..f6773a8274fc 100644 --- a/modules/round/src/main/StepBuilder.scala +++ b/modules/round/src/main/StepBuilder.scala @@ -1,9 +1,9 @@ package lila.round -import chess.format.{ Fen, Uci } import chess.format.pgn.SanStr -import chess.{ Check, Ply, Square } +import chess.format.{ Fen, Uci } import chess.variant.Variant +import chess.{ Check, Ply, Square } import play.api.libs.json.* case class Step( diff --git a/modules/round/src/main/Takebacker.scala b/modules/round/src/main/Takebacker.scala index 6eee15a41797..512153c535a9 100644 --- a/modules/round/src/main/Takebacker.scala +++ b/modules/round/src/main/Takebacker.scala @@ -3,11 +3,11 @@ package lila.round import chess.{ ByColor, Color } import lila.common.Bus -import lila.game.{ Event, Game, GameRepo, Pov, Progress, Rewind, UciMemo } -import lila.core.i18n.{ I18nKey as trans, defaultLang, Translator } +import lila.core.data.Preload +import lila.core.i18n.{ I18nKey as trans, Translator, defaultLang } import lila.core.round.* +import lila.game.{ Event, GameRepo, Progress, Rewind, UciMemo } import lila.pref.{ Pref, PrefApi } -import lila.core.data.Preload import lila.round.RoundAsyncActor.TakebackSituation import lila.round.RoundGame.playableByAi diff --git a/modules/round/src/main/Titivate.scala b/modules/round/src/main/Titivate.scala index 60dcc260e34b..74a9d617597e 100644 --- a/modules/round/src/main/Titivate.scala +++ b/modules/round/src/main/Titivate.scala @@ -4,11 +4,10 @@ import akka.actor.* import akka.stream.scaladsl.* import lila.common.LilaStream -import lila.db.dsl.* -import lila.game.{ GameRepo, Query } import lila.core.round.{ Abandon, QuietFlag } +import lila.db.dsl.* import lila.game.GameExt.abandoned -import lila.game.Query.bothRatingsGreaterThan +import lila.game.{ GameRepo, Query } /* * Cleans up unfinished games diff --git a/modules/round/src/main/actorApi.scala b/modules/round/src/main/actorApi.scala index 64f9c0e9955a..8a13b365798c 100644 --- a/modules/round/src/main/actorApi.scala +++ b/modules/round/src/main/actorApi.scala @@ -2,9 +2,7 @@ package lila.round import chess.format.Uci import chess.{ Color, MoveMetrics } -import play.api.libs.json.JsObject -import lila.core.net.IpAddress import lila.core.socket.SocketVersion private case class HumanPlay( diff --git a/modules/round/src/main/model.scala b/modules/round/src/main/model.scala index c067fb34997c..f03e0befe649 100644 --- a/modules/round/src/main/model.scala +++ b/modules/round/src/main/model.scala @@ -1,6 +1,4 @@ package lila.round -import play.api.libs.json.JsObject - opaque type ScheduleExpiration = Game => Unit object ScheduleExpiration extends FunctionWrapper[ScheduleExpiration, Game => Unit] diff --git a/modules/round/src/main/package.scala b/modules/round/src/main/package.scala index a7771f96dbed..e063b7f51efe 100644 --- a/modules/round/src/main/package.scala +++ b/modules/round/src/main/package.scala @@ -1,7 +1,5 @@ package lila.round -import lila.game.Event - export lila.core.lilaism.Lilaism.{ *, given } export lila.common.extensions.* export lila.core.id.{ GameFullId, GamePlayerId, GameAnyId } diff --git a/modules/round/src/main/ui/RoundI18n.scala b/modules/round/src/main/ui/RoundI18n.scala index e194a905f337..a517c7b4f2eb 100644 --- a/modules/round/src/main/ui/RoundI18n.scala +++ b/modules/round/src/main/ui/RoundI18n.scala @@ -1,12 +1,11 @@ package lila.round package ui -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.i18n.{ I18nKey, Translate } +import lila.ui.* final class RoundI18n(helpers: Helpers): - import helpers.{ *, given } + import helpers.* def apply(g: Game)(using t: Translate) = i18nJsObject: diff --git a/modules/round/src/main/ui/RoundUi.scala b/modules/round/src/main/ui/RoundUi.scala index 6cfff4aba7eb..8608b4b10337 100644 --- a/modules/round/src/main/ui/RoundUi.scala +++ b/modules/round/src/main/ui/RoundUi.scala @@ -1,9 +1,11 @@ package lila.round package ui +import chess.variant.{ Crazyhouse, Variant } + import lila.ui.* + import ScalatagsTemplate.{ *, given } -import chess.variant.{ Variant, Crazyhouse } final class RoundUi(helpers: Helpers, gameUi: lila.game.ui.GameUi): import helpers.{ *, given } diff --git a/modules/search/src/main/Env.scala b/modules/search/src/main/Env.scala index db89c75f6548..defd4d21be15 100644 --- a/modules/search/src/main/Env.scala +++ b/modules/search/src/main/Env.scala @@ -3,9 +3,9 @@ package lila.search import com.softwaremill.macwire.* import play.api.Configuration import play.api.libs.ws.StandaloneWSClient -import lila.search.client.SearchClient import lila.common.autoconfig.* +import lila.search.client.SearchClient @Module private class SearchConfig( diff --git a/modules/search/src/main/LilaSearchClient.scala b/modules/search/src/main/LilaSearchClient.scala index c20a9cad0e0d..4128e0501a3d 100644 --- a/modules/search/src/main/LilaSearchClient.scala +++ b/modules/search/src/main/LilaSearchClient.scala @@ -1,7 +1,7 @@ package lila.search +import lila.search.client.{ SearchClient, SearchError } import lila.search.spec.* -import lila.search.client.{ SearchError, SearchClient } class LilaSearchClient(client: SearchClient, writeable: Boolean)(using Executor) extends SearchClient: diff --git a/modules/security/src/main/Authenticator.scala b/modules/security/src/main/Authenticator.scala index e3801c642f0d..7debc5b45787 100644 --- a/modules/security/src/main/Authenticator.scala +++ b/modules/security/src/main/Authenticator.scala @@ -2,10 +2,10 @@ package lila.security import com.roundeights.hasher.Implicits.* -import lila.db.dsl.{ *, given } -import lila.user.{ UserRepo, TotpToken, AuthData, BSONFields as F } import lila.core.email.NormalizedEmailAddress import lila.core.security.{ ClearPassword, HashedPassword } +import lila.db.dsl.{ *, given } +import lila.user.{ AuthData, BSONFields as F, TotpToken, UserRepo } case class PasswordAndToken(password: ClearPassword, token: Option[TotpToken]) type CredentialCheck = ClearPassword => Boolean diff --git a/modules/security/src/main/EmailChange.scala b/modules/security/src/main/EmailChange.scala index dd0385e9c6a2..2cc35affce13 100644 --- a/modules/security/src/main/EmailChange.scala +++ b/modules/security/src/main/EmailChange.scala @@ -1,9 +1,9 @@ package lila.security +import scalalib.Iso import scalatags.Text.all.* import lila.core.config.* -import scalalib.Iso import lila.core.i18n.I18nKey.emails as trans import lila.mailer.Mailer import lila.user.{ Me, User, UserRepo } diff --git a/modules/security/src/main/Env.scala b/modules/security/src/main/Env.scala index 5bfe878678bb..e5ea396883a4 100644 --- a/modules/security/src/main/Env.scala +++ b/modules/security/src/main/Env.scala @@ -6,8 +6,8 @@ import com.softwaremill.tagging.* import play.api.Configuration import play.api.libs.ws.StandaloneWSClient -import lila.core.data.Strings import lila.core.config.* +import lila.core.data.Strings import lila.memo.SettingStore import lila.memo.SettingStore.Strings.given import lila.oauth.OAuthServer diff --git a/modules/security/src/main/Flood.scala b/modules/security/src/main/Flood.scala index c5f26f76baf4..dbc2f499e5aa 100644 --- a/modules/security/src/main/Flood.scala +++ b/modules/security/src/main/Flood.scala @@ -1,6 +1,7 @@ package lila.security import com.github.blemale.scaffeine.Cache + import lila.core.security.FloodSource as Source final class Flood(using Executor) extends lila.core.security.FloodApi: diff --git a/modules/security/src/main/GarbageCollector.scala b/modules/security/src/main/GarbageCollector.scala index 1e9cd1d65db6..12a6d45ffc0c 100644 --- a/modules/security/src/main/GarbageCollector.scala +++ b/modules/security/src/main/GarbageCollector.scala @@ -1,12 +1,12 @@ package lila.security -import scalalib.ThreadLocalRandom import play.api.mvc.RequestHeader +import scalalib.ThreadLocalRandom import lila.common.{ Bus, HTTPRequest } +import lila.core.lilaism.LilaNoStackTrace import lila.core.net.IpAddress import lila.core.security.UserSignup -import lila.core.lilaism.LilaNoStackTrace // codename UGC final class GarbageCollector( diff --git a/modules/security/src/main/GeoIP.scala b/modules/security/src/main/GeoIP.scala index 2026c1421c80..062e7b7f9d91 100644 --- a/modules/security/src/main/GeoIP.scala +++ b/modules/security/src/main/GeoIP.scala @@ -7,9 +7,9 @@ import play.api.ConfigLoader import scala.util.Try -import lila.core.net.IpAddress import lila.common.autoconfig.* import lila.core.config.ConfigName +import lila.core.net.IpAddress import lila.core.security.IsProxy final class GeoIP(config: GeoIP.Config)(using Executor): diff --git a/modules/security/src/main/Hcaptcha.scala b/modules/security/src/main/Hcaptcha.scala index 5749e2ef15b4..376e147f5f32 100644 --- a/modules/security/src/main/Hcaptcha.scala +++ b/modules/security/src/main/Hcaptcha.scala @@ -9,10 +9,10 @@ import play.api.libs.ws.JsonBodyReadables.* import play.api.libs.ws.StandaloneWSClient import play.api.mvc.RequestHeader +import lila.common.HTTPRequest import lila.common.autoconfig.* import lila.common.config.given import lila.core.config.* -import lila.common.HTTPRequest import lila.core.net.IpAddress import lila.core.security.{ HcaptchaForm, HcaptchaPublicConfig } diff --git a/modules/security/src/main/Ip2Proxy.scala b/modules/security/src/main/Ip2Proxy.scala index e428998f5c39..20ab81db2ad4 100644 --- a/modules/security/src/main/Ip2Proxy.scala +++ b/modules/security/src/main/Ip2Proxy.scala @@ -4,7 +4,7 @@ import play.api.libs.ws.JsonBodyReadables.* import play.api.libs.ws.StandaloneWSClient import lila.core.net.IpAddress -import lila.core.security.{ IsProxy, Ip2ProxyApi } +import lila.core.security.{ Ip2ProxyApi, IsProxy } final class Ip2ProxySkip extends Ip2ProxyApi: def apply(ip: IpAddress): Fu[IsProxy] = fuccess(IsProxy.empty) diff --git a/modules/security/src/main/IpTrust.scala b/modules/security/src/main/IpTrust.scala index 4ecf5faa5f31..d0ef6bc8a7b3 100644 --- a/modules/security/src/main/IpTrust.scala +++ b/modules/security/src/main/IpTrust.scala @@ -4,7 +4,7 @@ import play.api.mvc.RequestHeader import lila.common.HTTPRequest import lila.core.net.IpAddress -import lila.core.security.{ IsProxy, Ip2ProxyApi } +import lila.core.security.{ Ip2ProxyApi, IsProxy } final class IpTrust(proxyApi: Ip2ProxyApi, geoApi: GeoIP, firewallApi: Firewall)(using Executor, diff --git a/modules/security/src/main/LilaCookie.scala b/modules/security/src/main/LilaCookie.scala index d0c752134076..9eee66358167 100644 --- a/modules/security/src/main/LilaCookie.scala +++ b/modules/security/src/main/LilaCookie.scala @@ -1,8 +1,8 @@ package lila package security -import scalalib.SecureRandom import play.api.mvc.* +import scalalib.SecureRandom import lila.core.config.NetDomain import lila.core.security.LilaCookie diff --git a/modules/security/src/main/Mobile.scala b/modules/security/src/main/Mobile.scala index bbf7333a0049..ee813ef48f9c 100644 --- a/modules/security/src/main/Mobile.scala +++ b/modules/security/src/main/Mobile.scala @@ -3,9 +3,8 @@ package lila.security import play.api.mvc.RequestHeader import lila.common.HTTPRequest +import lila.core.net.{ ApiVersion, UserAgent } import lila.core.socket.Sri -import lila.core.net.ApiVersion -import lila.core.net.UserAgent object Mobile: diff --git a/modules/security/src/main/PrintBan.scala b/modules/security/src/main/PrintBan.scala index 832e6442a0b3..8132bb055a0e 100644 --- a/modules/security/src/main/PrintBan.scala +++ b/modules/security/src/main/PrintBan.scala @@ -2,8 +2,8 @@ package lila.security import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } import lila.core.security.FingerHash +import lila.db.dsl.{ *, given } final class PrintBan(coll: Coll)(using Executor): diff --git a/modules/security/src/main/SecurityApi.scala b/modules/security/src/main/SecurityApi.scala index e2fb20890dc5..e37ccf101312 100644 --- a/modules/security/src/main/SecurityApi.scala +++ b/modules/security/src/main/SecurityApi.scala @@ -1,21 +1,21 @@ package lila.security import com.softwaremill.tagging.* -import scalalib.SecureRandom import play.api.data.* import play.api.data.Forms.* import play.api.data.validation.{ Constraint, Invalid, Valid as FormValid, ValidationError } -import play.api.mvc.{ Session, RequestHeader } +import play.api.mvc.{ RequestHeader, Session } import reactivemongo.api.bson.* +import scalalib.SecureRandom import lila.common.Form.into import lila.common.HTTPRequest +import lila.core.email.UserStrOrEmail import lila.core.net.{ ApiVersion, IpAddress } +import lila.core.security.{ ClearPassword, FingerHash, Ip2ProxyApi, IsProxy } import lila.db.dsl.{ *, given } import lila.oauth.{ AccessToken, OAuthScope, OAuthServer } import lila.security.LoginCandidate.Result -import lila.core.email.UserStrOrEmail -import lila.core.security.{ IsProxy, Ip2ProxyApi, FingerHash, ClearPassword } final class SecurityApi( userRepo: lila.user.UserRepo, diff --git a/modules/security/src/main/SecurityForm.scala b/modules/security/src/main/SecurityForm.scala index fcc6d2019831..017770a36139 100644 --- a/modules/security/src/main/SecurityForm.scala +++ b/modules/security/src/main/SecurityForm.scala @@ -7,10 +7,9 @@ import play.api.mvc.RequestHeader import lila.common.Form.* import lila.common.{ Form as LilaForm, LameName } -import lila.user.TotpSecret -import lila.user.TotpSecret.{ base32, verify } import lila.core.security.ClearPassword -import lila.user.TotpToken +import lila.user.TotpSecret.{ base32, verify } +import lila.user.{ TotpSecret, TotpToken } final class SecurityForm( userRepo: lila.user.UserRepo, diff --git a/modules/security/src/main/Signup.scala b/modules/security/src/main/Signup.scala index c0b21fc2a44f..11acda382f90 100644 --- a/modules/security/src/main/Signup.scala +++ b/modules/security/src/main/Signup.scala @@ -4,12 +4,12 @@ import play.api.data.* import play.api.i18n.Lang import play.api.mvc.{ Request, RequestHeader } +import lila.common.HTTPRequest import lila.core.config.NetConfig -import lila.common.{ HTTPRequest } -import lila.core.net.{ ApiVersion, IpAddress } -import lila.memo.RateLimit import lila.core.email.UserIdOrEmail +import lila.core.net.{ ApiVersion, IpAddress } import lila.core.security.ClearPassword +import lila.memo.RateLimit final class Signup( store: Store, diff --git a/modules/security/src/main/Store.scala b/modules/security/src/main/Store.scala index ea6c825556c7..e74a6f74e1e0 100644 --- a/modules/security/src/main/Store.scala +++ b/modules/security/src/main/Store.scala @@ -7,12 +7,11 @@ import reactivemongo.api.bson.{ BSONDocumentHandler, BSONDocumentReader, BSONNul import scala.concurrent.blocking import lila.common.HTTPRequest -import lila.core.net.{ ApiVersion, IpAddress } +import lila.core.net.{ ApiVersion, IpAddress, UserAgent } +import lila.core.security.FingerHash +import lila.core.socket.Sri import lila.db.dsl.{ *, given } import lila.oauth.AccessToken -import lila.core.socket.Sri -import lila.core.net.UserAgent -import lila.core.security.FingerHash final class Store(val coll: Coll, cacheApi: lila.memo.CacheApi)(using Executor): diff --git a/modules/security/src/main/StringToken.scala b/modules/security/src/main/StringToken.scala index 916bce88d2a0..54fd971a55df 100644 --- a/modules/security/src/main/StringToken.scala +++ b/modules/security/src/main/StringToken.scala @@ -1,11 +1,11 @@ package lila.security import com.roundeights.hasher.Algo +import scalalib.Iso import java.nio.charset.StandardCharsets.UTF_8 import java.security.MessageDigest -import scalalib.Iso import lila.common.String.base64 import lila.core.config.Secret diff --git a/modules/security/src/main/UserLogins.scala b/modules/security/src/main/UserLogins.scala index 44b9db956d3f..a2892728c1dc 100644 --- a/modules/security/src/main/UserLogins.scala +++ b/modules/security/src/main/UserLogins.scala @@ -2,11 +2,10 @@ package lila.security import reactivemongo.api.bson.* -import lila.core.net.IpAddress +import lila.core.net.{ IpAddress, UserAgent } +import lila.core.security.{ FingerHash, Ip2ProxyApi, IsProxy } import lila.db.dsl.{ *, given } import lila.user.{ User, UserRepo } -import lila.core.security.{ IsProxy, Ip2ProxyApi, FingerHash } -import lila.core.net.UserAgent case class UserLogins( ips: List[UserLogins.IPData], diff --git a/modules/security/src/main/model.scala b/modules/security/src/main/model.scala index 8b3ebbb48a04..4bf1a762542f 100644 --- a/modules/security/src/main/model.scala +++ b/modules/security/src/main/model.scala @@ -1,11 +1,5 @@ package lila.security - -import play.api.data.Form -import play.api.mvc.RequestHeader - -import lila.core.net.IpAddress - -import lila.core.net.UserAgent +import lila.core.net.{ IpAddress, UserAgent } case class Dated[V](value: V, date: Instant) extends Ordered[Dated[V]]: def compare(other: Dated[V]) = other.date.compareTo(date) diff --git a/modules/security/src/main/ui/AccountSecurity.scala b/modules/security/src/main/ui/AccountSecurity.scala index 512775f9fa7b..a7faa0e8ef91 100644 --- a/modules/security/src/main/ui/AccountSecurity.scala +++ b/modules/security/src/main/ui/AccountSecurity.scala @@ -4,6 +4,7 @@ package ui import play.api.data.Form import lila.ui.* + import ScalatagsTemplate.{ *, given } final class AccountSecurity(helpers: Helpers)( diff --git a/modules/security/src/test/AuthTest.scala b/modules/security/src/test/AuthTest.scala index de7722458407..8098cd4b93e9 100644 --- a/modules/security/src/test/AuthTest.scala +++ b/modules/security/src/test/AuthTest.scala @@ -3,10 +3,8 @@ package lila.security import java.util.Base64 import lila.core.config.Secret - +import lila.core.security.{ ClearPassword as P, HashedPassword } import lila.user.AuthData -import lila.core.security.ClearPassword as P -import lila.core.security.HashedPassword class AuthTest extends munit.FunSuite: diff --git a/modules/security/src/test/MobileTest.scala b/modules/security/src/test/MobileTest.scala index 755ee7bb6e35..d58396b99c43 100644 --- a/modules/security/src/test/MobileTest.scala +++ b/modules/security/src/test/MobileTest.scala @@ -1,7 +1,7 @@ package lila.security -import lila.core.socket.Sri import lila.core.net.UserAgent +import lila.core.socket.Sri class MobileTest extends munit.FunSuite: diff --git a/modules/security/src/test/PasswordHasherTest.scala b/modules/security/src/test/PasswordHasherTest.scala index ae61644eeb03..ec29cf5ce02a 100644 --- a/modules/security/src/test/PasswordHasherTest.scala +++ b/modules/security/src/test/PasswordHasherTest.scala @@ -1,7 +1,6 @@ package lila.security import lila.core.config.Secret - import lila.core.security.ClearPassword as P class PasswordHasherTest extends munit.FunSuite: diff --git a/modules/setup/src/main/AiConfig.scala b/modules/setup/src/main/AiConfig.scala index 60e73c38d2b2..a05dac8df42e 100644 --- a/modules/setup/src/main/AiConfig.scala +++ b/modules/setup/src/main/AiConfig.scala @@ -3,13 +3,11 @@ package lila.setup import chess.format.Fen import chess.variant.Variant import chess.{ ByColor, Clock } - import scalalib.model.Days -import lila.core.game.{ IdGenerator, Player, NewPlayer } -import lila.lobby.TriColor -import lila.rating.PerfType + +import lila.core.game.{ IdGenerator, NewPlayer, Player, Source } import lila.core.user.GameUser -import lila.core.game.Source +import lila.lobby.TriColor case class AiConfig( variant: chess.variant.Variant, diff --git a/modules/setup/src/main/ApiAiConfig.scala b/modules/setup/src/main/ApiAiConfig.scala index 7e0d88e357c1..de98604c9136 100644 --- a/modules/setup/src/main/ApiAiConfig.scala +++ b/modules/setup/src/main/ApiAiConfig.scala @@ -3,13 +3,11 @@ package lila.setup import chess.format.Fen import chess.variant.{ FromPosition, Variant } import chess.{ ByColor, Clock } - import scalalib.model.Days -import lila.lobby.TriColor -import lila.rating.PerfType + +import lila.core.game.{ IdGenerator, NewPlayer, Source } import lila.core.user.GameUser -import lila.core.game.{ IdGenerator, Source } -import lila.core.game.NewPlayer +import lila.lobby.TriColor final case class ApiAiConfig( variant: Variant, diff --git a/modules/setup/src/main/ApiConfig.scala b/modules/setup/src/main/ApiConfig.scala index 688f4dfac46e..d429176ed155 100644 --- a/modules/setup/src/main/ApiConfig.scala +++ b/modules/setup/src/main/ApiConfig.scala @@ -1,7 +1,7 @@ package lila.setup import chess.format.Fen -import chess.variant.{ Chess960, FromPosition, Variant } +import chess.variant.{ FromPosition, Variant } import chess.{ Clock, Speed } import scalalib.model.Days diff --git a/modules/setup/src/main/Config.scala b/modules/setup/src/main/Config.scala index e53f2dffb40b..346b0697672d 100644 --- a/modules/setup/src/main/Config.scala +++ b/modules/setup/src/main/Config.scala @@ -3,8 +3,8 @@ package lila.setup import chess.format.Fen import chess.variant.{ FromPosition, Variant } import chess.{ Clock, Game as ChessGame, Situation, Speed } - import scalalib.model.Days + import lila.lobby.TriColor import lila.rating.PerfType diff --git a/modules/setup/src/main/HookConfig.scala b/modules/setup/src/main/HookConfig.scala index 642c5c800553..fd3e32f95ea5 100644 --- a/modules/setup/src/main/HookConfig.scala +++ b/modules/setup/src/main/HookConfig.scala @@ -4,11 +4,10 @@ import chess.variant.Variant import chess.{ Clock, Mode } import scalalib.model.Days -import lila.lobby.{ TriColor, Hook, Seek } -import lila.rating.{ Perf } -import lila.rating.RatingRange.withinLimits -import lila.core.rating.RatingRange import lila.core.perf.UserWithPerfs +import lila.core.rating.RatingRange +import lila.lobby.{ Hook, Seek, TriColor } +import lila.rating.RatingRange.withinLimits case class HookConfig( variant: chess.variant.Variant, diff --git a/modules/setup/src/main/Mappings.scala b/modules/setup/src/main/Mappings.scala index b6d9c203c26a..fe0dfc36af6a 100644 --- a/modules/setup/src/main/Mappings.scala +++ b/modules/setup/src/main/Mappings.scala @@ -3,14 +3,12 @@ package lila.setup import chess.format.Fen import chess.{ Clock, Mode, variant as V } import play.api.data.Forms.* -import play.api.data.Mapping import play.api.data.format.Formats.doubleFormat - import scalalib.model.Days + import lila.common.Form.{ *, given } -import lila.core.game.GameRule -import lila.lobby.TriColor import lila.core.rating.RatingRange +import lila.lobby.TriColor private object Mappings: diff --git a/modules/setup/src/main/OpenConfig.scala b/modules/setup/src/main/OpenConfig.scala index 840515008262..6c7a8fab4a16 100644 --- a/modules/setup/src/main/OpenConfig.scala +++ b/modules/setup/src/main/OpenConfig.scala @@ -3,10 +3,9 @@ package lila.setup import chess.Clock import chess.format.Fen import chess.variant.{ FromPosition, Variant } - import scalalib.model.Days + import lila.core.game.GameRule -import lila.rating.PerfType final case class OpenConfig( name: Option[String], diff --git a/modules/setup/src/main/Processor.scala b/modules/setup/src/main/Processor.scala index 2d714d06c70b..f92413b3e4a6 100644 --- a/modules/setup/src/main/Processor.scala +++ b/modules/setup/src/main/Processor.scala @@ -1,9 +1,8 @@ package lila.setup import lila.common.Bus -import lila.lobby.Seek -import lila.lobby.{ AddHook, AddSeek } import lila.core.perf.UserWithPerfs +import lila.lobby.{ AddHook, AddSeek, Seek } final private[setup] class Processor( gameApi: lila.core.game.GameApi, diff --git a/modules/setup/src/main/SetupForm.scala b/modules/setup/src/main/SetupForm.scala index 26e71cd1114a..1121740d3ad7 100644 --- a/modules/setup/src/main/SetupForm.scala +++ b/modules/setup/src/main/SetupForm.scala @@ -5,13 +5,12 @@ import chess.format.Fen import chess.variant.Variant import play.api.data.* import play.api.data.Forms.* +import scalalib.model.Days -import lila.common.Form.{ *, given } import lila.common.Form as LilaForm +import lila.common.Form.{ *, given } import lila.core.rating.RatingRange -import scalalib.model.Days - object SetupForm: import Mappings.* diff --git a/modules/setup/src/main/ui/SetupUi.scala b/modules/setup/src/main/ui/SetupUi.scala index c43e42f94c0e..0502d82cb3ac 100644 --- a/modules/setup/src/main/ui/SetupUi.scala +++ b/modules/setup/src/main/ui/SetupUi.scala @@ -1,13 +1,14 @@ package lila.setup package ui -import play.api.data.{ Form, Field } -import chess.{ Mode, Speed } import chess.variant.Variant +import chess.{ Mode, Speed } +import play.api.data.{ Field, Form } +import lila.core.rating.RatingRange import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.rating.RatingRange final class SetupUi(helpers: Helpers): import helpers.{ *, given } @@ -112,7 +113,7 @@ final class SetupUi(helpers: Helpers): private type SelectChoice = (String, String, Option[String]) - private val clockTimeChoices: List[SelectChoice] = List( + List( ("0", "0", none), ("0.25", "¼", none), ("0.5", "½", none), @@ -124,30 +125,19 @@ final class SetupUi(helpers: Helpers): ).map: v => (v, v, none) - private val clockIncrementChoices: List[SelectChoice] = { + { (0 to 20).toList ::: List(25, 30, 35, 40, 45, 60, 90, 120, 150, 180) }.map { s => (s.toString, s.toString, none) } - private val corresDaysChoices: List[SelectChoice] = - ("1", "One day", none) :: List(2, 3, 5, 7, 10, 14).map { d => + ("1", "One day", none) :: List(2, 3, 5, 7, 10, 14).map { d => (d.toString, s"$d days", none) } - private def translatedTimeModeChoices(using Translate) = - List( - (TimeMode.RealTime.id.toString, trans.site.realTime.txt(), none), - (TimeMode.Correspondence.id.toString, trans.site.correspondence.txt(), none), - (TimeMode.Unlimited.id.toString, trans.site.unlimited.txt(), none) - ) + - private def translatedSideChoices(using Translate) = - List( - ("black", trans.site.black.txt(), none), - ("random", trans.site.randomColor.txt(), none), - ("white", trans.site.white.txt(), none) - ) + private def translatedModeChoices(using Translate) = List( @@ -161,11 +151,7 @@ final class SetupUi(helpers: Helpers): (0, trans.site.no.txt(), none) ) - private def translatedModeChoicesTournament(using Translate) = - List( - (Mode.Casual.id.toString, trans.site.casualTournament.txt(), none), - (Mode.Rated.id.toString, trans.site.ratedTournament.txt(), none) - ) + private def encodeId(v: Variant) = v.id.toString @@ -197,26 +183,11 @@ final class SetupUi(helpers: Helpers): chess.variant.RacingKings ).map(variantTuple(encode)) - private def translatedVariantChoicesWithFen(using Translate) = - translatedVariantChoices :+ - variantTupleId(chess.variant.Chess960) :+ - variantTupleId(chess.variant.FromPosition) - - private def translatedAiVariantChoices(using Translate) = - translatedVariantChoices :+ - variantTupleId(chess.variant.Crazyhouse) :+ - variantTupleId(chess.variant.Chess960) :+ - variantTupleId(chess.variant.KingOfTheHill) :+ - variantTupleId(chess.variant.ThreeCheck) :+ - variantTupleId(chess.variant.Antichess) :+ - variantTupleId(chess.variant.Atomic) :+ - variantTupleId(chess.variant.Horde) :+ - variantTupleId(chess.variant.RacingKings) :+ - variantTupleId(chess.variant.FromPosition) - - private def translatedVariantChoicesWithVariantsAndFen(using Translate) = - translatedVariantChoicesWithVariantsById :+ - variantTupleId(chess.variant.FromPosition) + + + + + private def translatedSpeedChoices(using Translate) = Speed.limited.map: s => diff --git a/modules/shutup/src/main/Env.scala b/modules/shutup/src/main/Env.scala index 63f85dd868fb..495eee00f3a1 100644 --- a/modules/shutup/src/main/Env.scala +++ b/modules/shutup/src/main/Env.scala @@ -1,6 +1,4 @@ package lila.shutup - -import akka.actor.* import com.softwaremill.macwire.* import play.api.Configuration diff --git a/modules/shutup/src/main/PublicLine.scala b/modules/shutup/src/main/PublicLine.scala index 6c1a27618fdd..f6ae057c2b39 100644 --- a/modules/shutup/src/main/PublicLine.scala +++ b/modules/shutup/src/main/PublicLine.scala @@ -2,8 +2,8 @@ package lila.shutup import scala.util.Success -import lila.db.dsl.given import lila.core.shutup.PublicSource as Source +import lila.db.dsl.given case class PublicLine( text: String, diff --git a/modules/shutup/src/main/ShutupApi.scala b/modules/shutup/src/main/ShutupApi.scala index b7b82ce3a779..d1464ef57ba4 100644 --- a/modules/shutup/src/main/ShutupApi.scala +++ b/modules/shutup/src/main/ShutupApi.scala @@ -2,8 +2,8 @@ package lila.shutup import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } import lila.core.shutup.PublicSource +import lila.db.dsl.{ *, given } final class ShutupApi( coll: Coll, diff --git a/modules/simul/src/main/JsonView.scala b/modules/simul/src/main/JsonView.scala index db8d1df6b532..ba7e277feda1 100644 --- a/modules/simul/src/main/JsonView.scala +++ b/modules/simul/src/main/JsonView.scala @@ -5,7 +5,6 @@ import play.api.libs.json.* import lila.common.Json.given import lila.core.LightUser import lila.gathering.Condition.WithVerdicts -import lila.rating.PerfType final class JsonView( gameRepo: lila.core.game.GameRepo, diff --git a/modules/simul/src/main/Simul.scala b/modules/simul/src/main/Simul.scala index af79bc2985a9..cea91b97e794 100644 --- a/modules/simul/src/main/Simul.scala +++ b/modules/simul/src/main/Simul.scala @@ -1,15 +1,14 @@ package lila.simul -import reactivemongo.api.bson.Macros.Annotations.Key import chess.format.Fen import chess.variant.Variant import chess.{ Color, Speed } +import reactivemongo.api.bson.Macros.Annotations.Key import scalalib.ThreadLocalRandom -import lila.rating.PerfType - -import lila.core.rating.Score import lila.core.perf.UserWithPerfs +import lila.core.rating.Score +import lila.rating.PerfType import lila.rating.UserPerfsExt.bestPerf case class Simul( diff --git a/modules/simul/src/main/SimulApi.scala b/modules/simul/src/main/SimulApi.scala index 8d8e16cb44b4..e26be947d2fd 100644 --- a/modules/simul/src/main/SimulApi.scala +++ b/modules/simul/src/main/SimulApi.scala @@ -3,21 +3,21 @@ package lila.simul import akka.actor.* import chess.variant.Variant import chess.{ ByColor, Status } -import play.api.libs.json.Json import monocle.syntax.all.* +import play.api.libs.json.Json +import scalalib.paginator.Paginator import lila.common.Json.given -import scalalib.paginator.Paginator import lila.common.{ Bus, Debouncer } +import lila.core.perf.UserWithPerfs +import lila.core.socket.SendToFlag +import lila.core.team.LightTeam +import lila.core.timeline.{ Propagate, SimulCreate, SimulJoin } import lila.db.dsl.{ *, given } import lila.gathering.Condition import lila.gathering.Condition.GetMyTeamIds -import lila.core.team.LightTeam -import lila.core.timeline.{ Propagate, SimulCreate, SimulJoin } import lila.memo.CacheApi.* import lila.rating.PerfType -import lila.core.socket.SendToFlag -import lila.core.perf.UserWithPerfs import lila.rating.UserWithPerfs.only final class SimulApi( diff --git a/modules/simul/src/main/SimulCondition.scala b/modules/simul/src/main/SimulCondition.scala index 73beb49d2148..7dcd9784807b 100644 --- a/modules/simul/src/main/SimulCondition.scala +++ b/modules/simul/src/main/SimulCondition.scala @@ -1,12 +1,11 @@ package lila.simul +import lila.core.LightUser.Me +import lila.core.team.LightTeam +import lila.core.user.UserApi import lila.gathering.Condition.* import lila.gathering.{ Condition, ConditionList } -import lila.core.team.LightTeam - -import lila.core.LightUser.Me import lila.rating.PerfType -import lila.core.user.UserApi object SimulCondition: diff --git a/modules/simul/src/main/SimulPlayer.scala b/modules/simul/src/main/SimulPlayer.scala index da6846807714..d763e8d725f4 100644 --- a/modules/simul/src/main/SimulPlayer.scala +++ b/modules/simul/src/main/SimulPlayer.scala @@ -1,6 +1,7 @@ package lila.simul import chess.variant.Variant + import lila.core.user.WithPerf private[simul] case class SimulPlayer( diff --git a/modules/simul/src/main/SimulRepo.scala b/modules/simul/src/main/SimulRepo.scala index b01e616c9d24..a33785c91204 100644 --- a/modules/simul/src/main/SimulRepo.scala +++ b/modules/simul/src/main/SimulRepo.scala @@ -4,9 +4,9 @@ import chess.variant.Variant import chess.{ Clock, Status } import reactivemongo.api.bson.* +import lila.core.game.GameRepo import lila.db.BSON import lila.db.dsl.{ *, given } -import lila.core.game.GameRepo final private[simul] class SimulRepo(val coll: Coll, gameRepo: GameRepo)(using Executor): diff --git a/modules/simul/src/main/SimulSocket.scala b/modules/simul/src/main/SimulSocket.scala index 7b9b337669ea..bfa5bc7fb857 100644 --- a/modules/simul/src/main/SimulSocket.scala +++ b/modules/simul/src/main/SimulSocket.scala @@ -3,9 +3,8 @@ package lila.simul import play.api.libs.json.* import lila.common.Json.given - -import lila.room.RoomSocket.{ Protocol as RP, * } import lila.core.socket.{ protocol as P, * } +import lila.room.RoomSocket.{ Protocol as RP, * } final private class SimulSocket( repo: SimulRepo, diff --git a/modules/simul/src/main/ui/SimulFormUi.scala b/modules/simul/src/main/ui/SimulFormUi.scala index 4f9b70330494..f3388b0fb525 100644 --- a/modules/simul/src/main/ui/SimulFormUi.scala +++ b/modules/simul/src/main/ui/SimulFormUi.scala @@ -1,14 +1,14 @@ package lila.simul package ui -import play.api.data.{ Form, Field } +import play.api.data.{ Field, Form } -import lila.ui.* -import ScalatagsTemplate.{ *, given } -import lila.core.team.LightTeam import lila.core.i18n.Translate -import lila.gathering.ConditionForm +import lila.core.team.LightTeam import lila.gathering.ui.GatheringFormUi +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class SimulFormUi(helpers: Helpers)( setupCheckboxes: (Field, Seq[(Any, String, Option[String])], Set[String]) => Frag, diff --git a/modules/simul/src/main/ui/SimulHome.scala b/modules/simul/src/main/ui/SimulHome.scala index 1b3723cc6c43..df2cdbc8b9c4 100644 --- a/modules/simul/src/main/ui/SimulHome.scala +++ b/modules/simul/src/main/ui/SimulHome.scala @@ -1,9 +1,11 @@ package lila.simul package ui +import scalalib.paginator.Paginator + import lila.ui.* + import ScalatagsTemplate.{ *, given } -import scalalib.paginator.Paginator final class SimulHome(helpers: Helpers, ui: SimulUi): import helpers.{ *, given } diff --git a/modules/simul/src/main/ui/SimulShow.scala b/modules/simul/src/main/ui/SimulShow.scala index dff3933275ce..5d59b9f37a19 100644 --- a/modules/simul/src/main/ui/SimulShow.scala +++ b/modules/simul/src/main/ui/SimulShow.scala @@ -2,15 +2,13 @@ package lila.simul package ui import play.api.libs.json.* -import scalalib.paginator.Paginator -import lila.ui.* -import ScalatagsTemplate.{ *, given } -import lila.core.team.LightTeam +import lila.common.Json.given import lila.gathering.Condition.WithVerdicts import lila.gathering.ui.GatheringUi -import lila.common.Json.given -import lila.core.config.NetDomain +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class SimulShow(helpers: Helpers, ui: SimulUi, gathering: GatheringUi): import helpers.{ *, given } diff --git a/modules/simul/src/main/ui/SimulUi.scala b/modules/simul/src/main/ui/SimulUi.scala index 074c2ceef941..e255fded4fb0 100644 --- a/modules/simul/src/main/ui/SimulUi.scala +++ b/modules/simul/src/main/ui/SimulUi.scala @@ -2,6 +2,7 @@ package lila.simul package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } final class SimulUi(helpers: Helpers): diff --git a/modules/socket/src/main/RemoteSocket.scala b/modules/socket/src/main/RemoteSocket.scala index eeab15f83994..22b543bf1019 100644 --- a/modules/socket/src/main/RemoteSocket.scala +++ b/modules/socket/src/main/RemoteSocket.scala @@ -9,10 +9,10 @@ import play.api.libs.json.* import java.util.concurrent.atomic.AtomicReference import lila.common.{ Bus, Lilakka } +import lila.core.misc.streamer.StreamersOnline import lila.core.relation.{ Follow, UnFollow } import lila.core.round.Mlat import lila.core.security.CloseAccount -import lila.core.misc.streamer.StreamersOnline import lila.core.socket.remote.* import lila.core.socket.{ SocketRequester as _, * } diff --git a/modules/socket/src/main/UserLagCache.scala b/modules/socket/src/main/UserLagCache.scala index 0a9e060cd8a1..e11fc353eb8e 100644 --- a/modules/socket/src/main/UserLagCache.scala +++ b/modules/socket/src/main/UserLagCache.scala @@ -2,6 +2,7 @@ package lila.socket import chess.Centis import com.github.blemale.scaffeine.Cache + import lila.core.socket.userLag.* final class UserLagCache(using Executor): diff --git a/modules/storm/src/main/Env.scala b/modules/storm/src/main/Env.scala index 36e13e41d5e4..b9656eac1b8c 100644 --- a/modules/storm/src/main/Env.scala +++ b/modules/storm/src/main/Env.scala @@ -3,8 +3,8 @@ package lila.storm import com.softwaremill.macwire.* import play.api.Configuration -import lila.core.config.* import lila.common.config.given +import lila.core.config.* @Module final class Env( diff --git a/modules/storm/src/main/StormBsonHandlers.scala b/modules/storm/src/main/StormBsonHandlers.scala index 7906abed735c..8a9a69afe7ad 100644 --- a/modules/storm/src/main/StormBsonHandlers.scala +++ b/modules/storm/src/main/StormBsonHandlers.scala @@ -6,8 +6,8 @@ import reactivemongo.api.bson.* import scala.util.Success import lila.common.LichessDay -import lila.db.dsl.{ *, given } import lila.core.id.PuzzleId +import lila.db.dsl.{ *, given } object StormBsonHandlers: diff --git a/modules/storm/src/main/StormDay.scala b/modules/storm/src/main/StormDay.scala index 8ae363dbd84f..63064a10acb3 100644 --- a/modules/storm/src/main/StormDay.scala +++ b/modules/storm/src/main/StormDay.scala @@ -1,6 +1,7 @@ package lila.storm import scalalib.paginator.Paginator + import lila.common.{ Bus, LichessDay } import lila.db.dsl.* import lila.db.paginator.Adapter diff --git a/modules/storm/src/main/StormPuzzle.scala b/modules/storm/src/main/StormPuzzle.scala index af26442cf773..3c2a8233802b 100644 --- a/modules/storm/src/main/StormPuzzle.scala +++ b/modules/storm/src/main/StormPuzzle.scala @@ -1,6 +1,7 @@ package lila.storm import chess.format.{ Fen, Uci } + import lila.core.id.PuzzleId case class StormPuzzle( diff --git a/modules/storm/src/main/ui/StormUi.scala b/modules/storm/src/main/ui/StormUi.scala index 5366eab995d5..cd7fb85d09c9 100644 --- a/modules/storm/src/main/ui/StormUi.scala +++ b/modules/storm/src/main/ui/StormUi.scala @@ -2,11 +2,12 @@ package lila.storm package ui import play.api.libs.json.* +import scalalib.paginator.Paginator +import lila.core.id.CmsPageKey import lila.ui.* + import ScalatagsTemplate.{ *, given } -import scalalib.paginator.Paginator -import lila.core.id.CmsPageKey final class StormUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/streamer/src/main/LiveStream.scala b/modules/streamer/src/main/LiveStream.scala index c6ef5ece789a..de26d70091c4 100644 --- a/modules/streamer/src/main/LiveStream.scala +++ b/modules/streamer/src/main/LiveStream.scala @@ -1,7 +1,7 @@ package lila.streamer import lila.core.i18n.Language -import lila.memo.CacheApi.* import lila.core.userId +import lila.memo.CacheApi.* case class LiveStreams(streams: List[Stream]): diff --git a/modules/streamer/src/main/Stream.scala b/modules/streamer/src/main/Stream.scala index 104d04d4ded3..6ee4d187a88d 100644 --- a/modules/streamer/src/main/Stream.scala +++ b/modules/streamer/src/main/Stream.scala @@ -3,10 +3,10 @@ package lila.streamer import play.api.i18n.Lang import play.api.libs.json.* -import lila.core.config.NetDomain import lila.common.Json.given import lila.common.String.html.unescapeHtml import lila.common.String.removeMultibyteSymbols +import lila.core.config.NetDomain import lila.core.i18n.Language trait Stream: diff --git a/modules/streamer/src/main/Streamer.scala b/modules/streamer/src/main/Streamer.scala index d1014cba274a..4847cbd749b1 100644 --- a/modules/streamer/src/main/Streamer.scala +++ b/modules/streamer/src/main/Streamer.scala @@ -1,7 +1,7 @@ package lila.streamer -import reactivemongo.api.bson.Macros.Annotations.Key import cats.derived.* +import reactivemongo.api.bson.Macros.Annotations.Key import lila.core.i18n.Language import lila.core.id.ImageId diff --git a/modules/streamer/src/main/StreamerPager.scala b/modules/streamer/src/main/StreamerPager.scala index a33fc4cb2fc6..70469f344cac 100644 --- a/modules/streamer/src/main/StreamerPager.scala +++ b/modules/streamer/src/main/StreamerPager.scala @@ -1,8 +1,8 @@ package lila.streamer import reactivemongo.api.* - import scalalib.paginator.{ AdapterLike, Paginator } + import lila.db.dsl.{ *, given } final class StreamerPager( diff --git a/modules/streamer/src/main/Streaming.scala b/modules/streamer/src/main/Streaming.scala index 9635bf88aa28..afb98508f65c 100644 --- a/modules/streamer/src/main/Streaming.scala +++ b/modules/streamer/src/main/Streaming.scala @@ -1,7 +1,7 @@ package lila.streamer -import scalalib.ThreadLocalRandom import play.api.i18n.Lang +import scalalib.ThreadLocalRandom import lila.common.{ Bus, LilaScheduler } diff --git a/modules/streamer/src/main/ui/StreamerBits.scala b/modules/streamer/src/main/ui/StreamerBits.scala index 245d27f9f436..e4d35bd58aca 100644 --- a/modules/streamer/src/main/ui/StreamerBits.scala +++ b/modules/streamer/src/main/ui/StreamerBits.scala @@ -1,12 +1,9 @@ package lila.streamer package ui - -import play.api.data.Form - +import lila.core.id.{ CmsPageKey, ImageId } import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.id.ImageId -import lila.core.id.CmsPageKey final class StreamerBits(helpers: Helpers)(picfitUrl: lila.core.misc.PicfitUrl): import helpers.{ *, given } diff --git a/modules/streamer/src/main/ui/StreamerEdit.scala b/modules/streamer/src/main/ui/StreamerEdit.scala index 66c59062f657..8fca67fdf044 100644 --- a/modules/streamer/src/main/ui/StreamerEdit.scala +++ b/modules/streamer/src/main/ui/StreamerEdit.scala @@ -4,6 +4,7 @@ package ui import play.api.data.Form import lila.ui.* + import ScalatagsTemplate.{ *, given } final class StreamerEdit(helpers: Helpers, bits: StreamerBits): diff --git a/modules/streamer/src/main/ui/StreamerUi.scala b/modules/streamer/src/main/ui/StreamerUi.scala index ba2a99e11d13..42734c1bee97 100644 --- a/modules/streamer/src/main/ui/StreamerUi.scala +++ b/modules/streamer/src/main/ui/StreamerUi.scala @@ -1,13 +1,11 @@ package lila.streamer package ui - -import play.api.data.Form import scalalib.paginator.Paginator +import lila.core.config.NetDomain import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.perf.UserPerfs -import lila.core.config.NetDomain final class StreamerUi(helpers: Helpers, bits: StreamerBits)(using netDomain: NetDomain): import helpers.{ *, given } diff --git a/modules/study/src/main/AnaDests.scala b/modules/study/src/main/AnaDests.scala index c043d10b2074..9d14504c9e87 100644 --- a/modules/study/src/main/AnaDests.scala +++ b/modules/study/src/main/AnaDests.scala @@ -1,11 +1,11 @@ package lila.study import chess.format.Fen +import chess.json.Json.destString import chess.variant.Variant import play.api.libs.json.* import lila.common.Json.given -import chess.json.Json.destString case class AnaDests( variant: Variant, diff --git a/modules/study/src/main/BSONHandlers.scala b/modules/study/src/main/BSONHandlers.scala index 302758fe7cb9..0ac3bb574141 100644 --- a/modules/study/src/main/BSONHandlers.scala +++ b/modules/study/src/main/BSONHandlers.scala @@ -1,17 +1,18 @@ package lila.study -import chess.format.pgn.{ Glyph, Glyphs, Tag, Tags, SanStr } +import chess.format.pgn.{ Glyph, Glyphs, SanStr, Tag, Tags } import chess.format.{ Fen, Uci, UciCharPair, UciPath } import chess.variant.{ Crazyhouse, Variant } -import chess.{ Centis, ByColor, Square, PromotableRole, Role, Outcome, Ply, Check, FideId } +import chess.{ ByColor, Centis, Check, FideId, Ply, PromotableRole, Role, Square } import reactivemongo.api.bson.* + import scala.util.Success import lila.db.BSON import lila.db.BSON.{ Reader, Writer } import lila.db.dsl.{ *, given } -import lila.tree.{ Root, Branch, Branches, NewBranch, Metas, NewRoot, Score } import lila.tree.Node.{ Comment, Comments, Gamebook, Shape, Shapes } +import lila.tree.{ Branch, Branches, Metas, NewBranch, NewRoot, Root, Score } object BSONHandlers: diff --git a/modules/study/src/main/ChapterMaker.scala b/modules/study/src/main/ChapterMaker.scala index dc7e9ddb9af8..4f24b18c69a8 100644 --- a/modules/study/src/main/ChapterMaker.scala +++ b/modules/study/src/main/ChapterMaker.scala @@ -4,10 +4,10 @@ import chess.format.Fen import chess.format.pgn.{ PgnStr, Tags } import chess.variant.Variant -import lila.tree.{ Branches, Root } +import lila.core.game.Namer import lila.core.i18n.Translator import lila.core.id.GameFullId -import lila.core.game.Namer +import lila.tree.{ Branches, Root } final private class ChapterMaker( net: lila.core.config.NetConfig, @@ -130,7 +130,6 @@ final private class ChapterMaker( withRatings: Boolean, initialFen: Option[Fen.Full] = None ): Fu[Chapter] = - given play.api.i18n.Lang = lila.core.i18n.defaultLang for root <- makeRoot(game, data.pgn, initialFen) tags <- pgnDump.tags(game, initialFen, none, withOpening = true, withRatings) diff --git a/modules/study/src/main/CommentParser.scala b/modules/study/src/main/CommentParser.scala index 42ea15386640..01fb37fccc9b 100644 --- a/modules/study/src/main/CommentParser.scala +++ b/modules/study/src/main/CommentParser.scala @@ -2,8 +2,8 @@ package lila.study import chess.format.pgn.Comment as ChessComment import chess.{ Centis, Square } - import scalalib.Maths + import lila.tree.Node.{ Shape, Shapes } private[study] object CommentParser: diff --git a/modules/study/src/main/GameToRoot.scala b/modules/study/src/main/GameToRoot.scala index 04ea505e8a5f..761d5bb7fef3 100644 --- a/modules/study/src/main/GameToRoot.scala +++ b/modules/study/src/main/GameToRoot.scala @@ -4,7 +4,7 @@ import chess.Outcome import chess.format.Fen import lila.tree.Node.Comment -import lila.tree.{ ExportOptions, TreeBuilder, Root } +import lila.tree.{ ExportOptions, Root, TreeBuilder } object GameToRoot: diff --git a/modules/study/src/main/JsonView.scala b/modules/study/src/main/JsonView.scala index e5ae2aaf27ed..ec0196bf0893 100644 --- a/modules/study/src/main/JsonView.scala +++ b/modules/study/src/main/JsonView.scala @@ -4,9 +4,9 @@ import chess.Square import play.api.libs.json.* import lila.common.Json.{ *, given } +import lila.core.i18n.Translate import lila.core.socket.Sri import lila.tree.Node.Shape -import lila.core.i18n.Translate final class JsonView( studyRepo: StudyRepo, @@ -137,7 +137,6 @@ object JsonView: ) def glyphs(using Translate): JsObject = - import lila.tree.Node.given import lila.core.i18n.I18nKey.{ study as trans } import chess.format.pgn.Glyph import Glyph.MoveAssessment.* diff --git a/modules/study/src/main/PgnDump.scala b/modules/study/src/main/PgnDump.scala index f06b21415292..06fee2eb92dd 100644 --- a/modules/study/src/main/PgnDump.scala +++ b/modules/study/src/main/PgnDump.scala @@ -1,12 +1,12 @@ package lila.study import akka.stream.scaladsl.* -import chess.format.pgn.{ Glyphs, InitialComments, Pgn, Tag, Tags, PgnStr, Comment, PgnTree } -import chess.format.{ pgn as chessPgn } - +import chess.format.pgn as chessPgn +import chess.format.pgn.{ Comment, Glyphs, InitialComments, Pgn, PgnStr, PgnTree, Tag, Tags } import scalalib.StringOps.slug -import lila.tree.{ Analysis, Root, Metas, NewBranch, NewTree, NewRoot } + import lila.tree.Node.{ Shape, Shapes } +import lila.tree.{ Analysis, Metas, NewBranch, NewRoot, NewTree, Root } final class PgnDump( chapterRepo: ChapterRepo, diff --git a/modules/study/src/main/ServerEval.scala b/modules/study/src/main/ServerEval.scala index 5b272b173216..1add2270d846 100644 --- a/modules/study/src/main/ServerEval.scala +++ b/modules/study/src/main/ServerEval.scala @@ -4,11 +4,10 @@ import chess.format.pgn.Glyphs import chess.format.{ Fen, Uci, UciCharPair, UciPath } import play.api.libs.json.* -import lila.db.dsl.bsonWriteOpt import lila.core.perm.Granter +import lila.db.dsl.bsonWriteOpt import lila.tree.Node.Comment -import lila.tree.{ Branch, Node, Root } -import lila.tree.{ Advice, Analysis, Info } +import lila.tree.{ Advice, Analysis, Branch, Info, Node, Root } object ServerEval: @@ -68,7 +67,7 @@ object ServerEval: .foldM(UciPath.root): case (path, (node, (info, advOpt))) => saveAnalysis(chapter, node, path, info, advOpt) - .andDo(sendProgress(chapter, studyId, chapterId, analysis)) + .andDo(sendProgress(studyId, chapterId, analysis)) .logFailure(logger) yield () case _ => funit @@ -154,7 +153,6 @@ object ServerEval: ) private def sendProgress( - chapter: Chapter, studyId: StudyId, chapterId: StudyChapterId, analysis: Analysis diff --git a/modules/study/src/main/Study.scala b/modules/study/src/main/Study.scala index b2b779bca13d..bbba1ebdf361 100644 --- a/modules/study/src/main/Study.scala +++ b/modules/study/src/main/Study.scala @@ -1,12 +1,12 @@ package lila.study import chess.format.UciPath -import scalalib.ThreadLocalRandom import reactivemongo.api.bson.Macros.Annotations.Key +import scalalib.ThreadLocalRandom -import lila.core.{ study as hub } -import lila.core.study.Visibility import lila.core.data.OpaqueInstant +import lila.core.study as hub +import lila.core.study.Visibility case class Study( @Key("_id") id: StudyId, diff --git a/modules/study/src/main/StudyApi.scala b/modules/study/src/main/StudyApi.scala index 900582422241..a0c55b8fe511 100644 --- a/modules/study/src/main/StudyApi.scala +++ b/modules/study/src/main/StudyApi.scala @@ -6,10 +6,10 @@ import chess.format.UciPath import chess.format.pgn.{ Glyph, Tags } import lila.common.Bus -import lila.core.timeline.{ Propagate, StudyLike } import lila.core.perm.Granter import lila.core.socket.Sri -import lila.core.{ study as hub } +import lila.core.study as hub +import lila.core.timeline.{ Propagate, StudyLike } import lila.tree.Branch import lila.tree.Node.{ Comment, Gamebook, Shapes } diff --git a/modules/study/src/main/StudyChapterPreview.scala b/modules/study/src/main/StudyChapterPreview.scala index 3661354a19a5..c04751de62c9 100644 --- a/modules/study/src/main/StudyChapterPreview.scala +++ b/modules/study/src/main/StudyChapterPreview.scala @@ -6,8 +6,8 @@ import chess.{ ByColor, Centis, Color, Elo, FideId, Outcome, PlayerName, PlayerT import play.api.libs.json.* import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } import lila.core.fide.Federation +import lila.db.dsl.{ *, given } case class ChapterPreview( id: StudyChapterId, diff --git a/modules/study/src/main/StudyFlatTree.scala b/modules/study/src/main/StudyFlatTree.scala index 469d66bfa17c..07bc7f1a90ec 100644 --- a/modules/study/src/main/StudyFlatTree.scala +++ b/modules/study/src/main/StudyFlatTree.scala @@ -1,14 +1,13 @@ package lila.study -import BSONHandlers.{ readBranch, writeBranch, readNewBranch, writeNewBranch } +import chess.format.{ UciCharPair, UciPath } import lila.common.Chronometer import lila.db.dsl.* -import chess.format.UciPath -import lila.tree.{ Root, Branch, Branches, NewBranch, NewTree, NewRoot } -import chess.format.UciCharPair import lila.tree.NewTree.* -import chess.Variation +import lila.tree.{ Branch, Branches, NewBranch, NewRoot, NewTree, Root } + +import BSONHandlers.{ readBranch, writeBranch, readNewBranch, writeNewBranch } private object StudyFlatTree: diff --git a/modules/study/src/main/StudyInvite.scala b/modules/study/src/main/StudyInvite.scala index 2ceb2e3273b0..2601b9f3181b 100644 --- a/modules/study/src/main/StudyInvite.scala +++ b/modules/study/src/main/StudyInvite.scala @@ -1,9 +1,9 @@ package lila.study -import lila.db.dsl.{ *, given } import lila.core.notify.{ InvitedToStudy, NotifyApi } -import lila.core.relation.Relation.{ Block, Follow } import lila.core.perm.Granter +import lila.core.relation.Relation.{ Block, Follow } +import lila.db.dsl.{ *, given } final private class StudyInvite( studyRepo: StudyRepo, diff --git a/modules/study/src/main/StudyMaker.scala b/modules/study/src/main/StudyMaker.scala index badc921a2eeb..76be2afaccf9 100644 --- a/modules/study/src/main/StudyMaker.scala +++ b/modules/study/src/main/StudyMaker.scala @@ -60,7 +60,7 @@ final private class StudyMaker( user: User, withRatings: Boolean ): Fu[Study.WithChapter] = { - given play.api.i18n.Lang = lila.core.i18n.defaultLang + // given play.api.i18n.Lang = lila.core.i18n.defaultLang for root <- chapterMaker.makeRoot(pov.game, data.form.pgnStr, initialFen) tags <- pgnDump.tags(pov.game, initialFen, none, withOpening = true, withRatings) diff --git a/modules/study/src/main/StudyPager.scala b/modules/study/src/main/StudyPager.scala index e894999302af..35a7ada9ec1c 100644 --- a/modules/study/src/main/StudyPager.scala +++ b/modules/study/src/main/StudyPager.scala @@ -1,10 +1,11 @@ package lila.study import scalalib.paginator.Paginator -import lila.db.dsl.{ *, given } -import lila.db.paginator.{ Adapter, CachedAdapter } + import lila.core.i18n.I18nKey import lila.core.study.Order +import lila.db.dsl.{ *, given } +import lila.db.paginator.{ Adapter, CachedAdapter } final class StudyPager( studyRepo: StudyRepo, diff --git a/modules/study/src/main/StudyPgnImportNew.scala b/modules/study/src/main/StudyPgnImportNew.scala index 5f35a9187b1c..4aa0a1dd5881 100644 --- a/modules/study/src/main/StudyPgnImportNew.scala +++ b/modules/study/src/main/StudyPgnImportNew.scala @@ -1,22 +1,14 @@ package lila.study -import monocle.syntax.all.* -import chess.{ Centis, ErrorStr, Node as PgnNode, Outcome } -import chess.format.pgn.{ - Glyphs, - ParsedPgn, - ParsedPgnTree, - San, - Tags, - PgnStr, - PgnNodeData, - Comment as ChessComment -} -import chess.format.{ Fen, Uci, UciCharPair, UciPath } import chess.MoveOrDrop.* +import chess.format.pgn.{ Glyphs, ParsedPgn, ParsedPgnTree, PgnNodeData, PgnStr, Tags } +import chess.format.{ Fen, Uci, UciCharPair } +import chess.{ Centis, ErrorStr, Node as PgnNode, Outcome } +import monocle.syntax.all.* + import lila.core.LightUser -import lila.tree.Node.{ Comment, Comments, Shapes } -import lila.tree.{ ImportResult, NewRoot, NewTree, NewBranch, Metas } +import lila.tree.Node.{ Comment, Comments } +import lila.tree.{ ImportResult, Metas, NewBranch, NewRoot, NewTree } case class Context( currentGame: chess.Game, diff --git a/modules/study/src/main/StudyRepo.scala b/modules/study/src/main/StudyRepo.scala index d2e95128ff03..6522ff2341f0 100644 --- a/modules/study/src/main/StudyRepo.scala +++ b/modules/study/src/main/StudyRepo.scala @@ -5,12 +5,11 @@ import reactivemongo.akkastream.{ AkkaStreamCursor, cursorProducer } import reactivemongo.api.* import reactivemongo.api.bson.BSONDocument +import lila.core.study as hub +import lila.core.study.Visibility import lila.db.AsyncColl import lila.db.dsl.{ *, given } -import lila.core.{ study as hub } -import lila.core.study.Visibility - final class StudyRepo(private[study] val coll: AsyncColl)(using Executor, akka.stream.Materializer diff --git a/modules/study/src/main/StudySequencer.scala b/modules/study/src/main/StudySequencer.scala index ccd4734ec6a0..cd86f137816b 100644 --- a/modules/study/src/main/StudySequencer.scala +++ b/modules/study/src/main/StudySequencer.scala @@ -1,7 +1,6 @@ package lila.study import alleycats.Zero - import scalalib.actor.AsyncActorSequencers final private class StudySequencer( diff --git a/modules/study/src/main/StudySocket.scala b/modules/study/src/main/StudySocket.scala index 89fe125cbb68..cbafff5d8260 100644 --- a/modules/study/src/main/StudySocket.scala +++ b/modules/study/src/main/StudySocket.scala @@ -11,7 +11,7 @@ import lila.room.RoomSocket.{ Protocol as RP, * } import lila.core.socket.{ protocol as P, * } import lila.tree.Branch import lila.tree.Node.{ Comment, Gamebook, Shape, Shapes } -import lila.tree.Node.{ defaultNodeJsonWriter, minimalNodeJsonWriter } +import lila.tree.Node.minimalNodeJsonWriter import actorApi.Who @@ -45,7 +45,7 @@ final private class StudySocket( Json.obj( "analysis" -> analysis, "ch" -> chapterId, - "tree" -> defaultNodeJsonWriter.writes(tree), + "tree" -> lila.tree.Node.defaultNodeJsonWriter.writes(tree), "division" -> division ) ) diff --git a/modules/study/src/main/StudyTopic.scala b/modules/study/src/main/StudyTopic.scala index 5eae13dffc8b..54eaea6fe04d 100644 --- a/modules/study/src/main/StudyTopic.scala +++ b/modules/study/src/main/StudyTopic.scala @@ -4,7 +4,6 @@ import play.api.libs.json.* import reactivemongo.api.bson.* import lila.common.LilaFuture - import lila.db.AsyncColl import lila.db.dsl.{ *, given } diff --git a/modules/study/src/main/TreeBuilder.scala b/modules/study/src/main/TreeBuilder.scala index ba62d3528836..a6625862ac26 100644 --- a/modules/study/src/main/TreeBuilder.scala +++ b/modules/study/src/main/TreeBuilder.scala @@ -1,10 +1,8 @@ package lila.study - -import cats.syntax.all.* -import monocle.syntax.all.* import chess.variant.Variant -import lila.tree.{ Branch, Branches, Root } -import lila.tree.NewRoot +import monocle.syntax.all.* + +import lila.tree.{ Branches, NewRoot, Root } object TreeBuilder: diff --git a/modules/study/src/main/ui/ListUi.scala b/modules/study/src/main/ui/ListUi.scala index a5dcb691ce33..cf0892faccc9 100644 --- a/modules/study/src/main/ui/ListUi.scala +++ b/modules/study/src/main/ui/ListUi.scala @@ -4,10 +4,11 @@ package ui import play.api.data.Form import scalalib.paginator.Paginator +import lila.core.study.Order +import lila.study.Study.WithChaptersAndLiked import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.study.Study.WithChaptersAndLiked -import lila.core.study.Order final class ListUi(helpers: Helpers, bits: StudyBits): import helpers.{ *, given } diff --git a/modules/study/src/main/ui/StudyBits.scala b/modules/study/src/main/ui/StudyBits.scala index 063eeaaa6098..edc87047e783 100644 --- a/modules/study/src/main/ui/StudyBits.scala +++ b/modules/study/src/main/ui/StudyBits.scala @@ -1,10 +1,11 @@ package lila.study package ui -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.common.String.removeMultibyteSymbols import lila.core.study.Order +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class StudyBits(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/study/src/main/ui/StudyUi.scala b/modules/study/src/main/ui/StudyUi.scala index 003e19d01f87..6b192fad5938 100644 --- a/modules/study/src/main/ui/StudyUi.scala +++ b/modules/study/src/main/ui/StudyUi.scala @@ -1,11 +1,12 @@ package lila.study package ui +import lila.core.study.IdName import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.study.IdName -final class StudyUi(helpers: Helpers, bits: StudyBits): +final class StudyUi(helpers: Helpers): import helpers.{ *, given } def clone(s: Study)(using Context) = diff --git a/modules/study/src/test/BsonHandlersTest.scala b/modules/study/src/test/BsonHandlersTest.scala index 7b52eff322bf..0a69e5c99868 100644 --- a/modules/study/src/test/BsonHandlersTest.scala +++ b/modules/study/src/test/BsonHandlersTest.scala @@ -1,21 +1,14 @@ package lila.study +import chess.format.pgn.PgnStr + import scala.language.implicitConversions -import chess.CoreArbitraries.given -import org.scalacheck.Prop.{ forAll, propBoolean } -import monocle.syntax.all.* -import chess.{ Centis, ErrorStr, Node as ChessNode } -import chess.MoveOrDrop.* -import chess.format.pgn.{ Glyphs, ParsedPgn, San, Tags, PgnStr, PgnNodeData, Comment as ChessComment } -import chess.format.{ Fen, Uci, UciCharPair, UciPath } - -import lila.tree.Node.{ Comment, Comments, Shapes } -import lila.tree.{ Branch, Branches, Root, Metas, NewTree, NewBranch, NewRoot, Node } -import lila.study.BSONHandlers.given + import lila.db.BSON import lila.db.BSON.{ Reader, Writer } import lila.db.dsl.Bdoc -import lila.study.StudyArbitraries.{ *, given } +import lila.study.BSONHandlers.given +import lila.tree.{ NewRoot, Root } // in lila.study to have access to PgnImport class BsonHandlersTest extends munit.FunSuite: diff --git a/modules/study/src/test/Helpers.scala b/modules/study/src/test/Helpers.scala index c3725b687981..31b6c60488f1 100644 --- a/modules/study/src/test/Helpers.scala +++ b/modules/study/src/test/Helpers.scala @@ -1,12 +1,11 @@ package lila.study +import chess.format.pgn.{ PgnStr, Tags } +import chess.{ Centis, Node as PgnNode, Tree } import monocle.syntax.all.* -import chess.{ Centis, ErrorStr, Node as PgnNode, Tree, Variation } -import chess.format.UciPath -import chess.format.pgn.{ Glyphs, ParsedPgn, San, Tags, PgnStr, PgnNodeData, Comment as ChessComment } -import lila.tree.Node.{ Comment, Comments, Shapes } -import lila.tree.{ Branch, Branches, Root, Metas, NewTree, NewBranch, NewRoot, Node } +import lila.tree.Node.{ Comment, Comments } +import lila.tree.{ Branch, Branches, Metas, NewBranch, NewRoot, NewTree, Node, Root } object Helpers: import lila.tree.NewTree.* diff --git a/modules/study/src/test/JsonTest.scala b/modules/study/src/test/JsonTest.scala index 1001ebabb4f7..d4eb665ae83e 100644 --- a/modules/study/src/test/JsonTest.scala +++ b/modules/study/src/test/JsonTest.scala @@ -1,17 +1,16 @@ package lila.study -import lila.core.LightUser -import lila.tree.{ Node, Root, NewRoot } -import chess.variant.{ Variant, Standard } +import chess.variant.Variant +import play.api.libs.json.Json -import monocle.syntax.all.* +import lila.core.LightUser +import lila.db.BSON +import lila.db.BSON.{ Reader, Writer } +import lila.db.dsl.Bdoc import lila.study.Helpers.* +import lila.tree.{ NewRoot, Node, Root } -import lila.db.BSON import BSONHandlers.given -import lila.db.BSON.{ Writer, Reader } -import lila.db.dsl.Bdoc -import play.api.libs.json.Json class JsonTest extends munit.FunSuite: diff --git a/modules/study/src/test/NewTreeCheck.scala b/modules/study/src/test/NewTreeCheck.scala index 60ea7843cb86..859114178494 100644 --- a/modules/study/src/test/NewTreeCheck.scala +++ b/modules/study/src/test/NewTreeCheck.scala @@ -1,30 +1,25 @@ package lila.study -import chess.{ Centis, ErrorStr, Node as PgnNode, Situation } -import chess.format.pgn.{ Glyphs, ParsedPgn, San, Tags, PgnStr, PgnNodeData, Comment as ChessComment } -import chess.format.{ Fen, Uci, UciCharPair, UciPath } -import chess.MoveOrDrop.* - -import lila.tree.Node.{ Comment, Comments, Shapes } - -import cats.syntax.all.* -import StudyArbitraries.{ *, given } +import chess.Centis import chess.CoreArbitraries.given +import chess.format.UciPath +import chess.format.pgn.{ Glyph, PgnStr } import org.scalacheck.Prop.{ forAll, propBoolean } + import scala.language.implicitConversions -import lila.tree.{ Branch, Branches, Root, Metas, NewTree, NewBranch, NewRoot, Node } -import chess.format.pgn.Glyph import lila.db.BSON import lila.db.BSON.{ Reader, Writer } import lila.db.dsl.Bdoc import lila.study.BSONHandlers.given -import play.api.libs.json.Json +import lila.tree.Node.Shapes +import lila.tree.{ Branch, NewRoot, NewTree, Node, Root } + +import StudyArbitraries.{ *, given } @munit.IgnoreSuite class NewTreeCheck extends munit.ScalaCheckSuite: - import lila.tree.NewTree.* import Helpers.* given Conversion[String, PgnStr] = PgnStr(_) diff --git a/modules/study/src/test/PgnDumpTest.scala b/modules/study/src/test/PgnDumpTest.scala index f1366f2a9235..2de8b9d83fdb 100644 --- a/modules/study/src/test/PgnDumpTest.scala +++ b/modules/study/src/test/PgnDumpTest.scala @@ -1,13 +1,13 @@ package lila.study import chess.format.pgn.* -import chess.format.pgn.PgnTree.* import chess.format.{ Fen, Uci, UciCharPair } -import chess.{ Ply, Check, variant } -import Node.* +import chess.{ Check, Ply, variant } import lila.tree.{ Branch, Branches, Root } +import Node.* + class PgnDumpTest extends munit.FunSuite: given Conversion[Int, Ply] = Ply(_) diff --git a/modules/study/src/test/PgnRoundTripTest.scala b/modules/study/src/test/PgnRoundTripTest.scala index ace5ad30e7a6..a3a40e9f4efb 100644 --- a/modules/study/src/test/PgnRoundTripTest.scala +++ b/modules/study/src/test/PgnRoundTripTest.scala @@ -1,23 +1,16 @@ package lila.study - -import chess.{ Centis, ErrorStr, Node as PgnNode } -import chess.format.pgn.{ PgnStr, Tags } - -import lila.core.LightUser -import lila.tree.{ Root, Branch, Branches } -import lila.tree.Node.{ Comment, Comments, Shapes } +import chess.format.pgn.PgnStr import scala.language.implicitConversions -import lila.tree.{ Branch, Branches, Root } - +import lila.core.LightUser import lila.db.BSON -import BSONHandlers.given -import lila.db.BSON.Writer -import lila.db.BSON.Reader +import lila.db.BSON.{ Reader, Writer } import lila.db.dsl.Bdoc +import lila.tree.{ NewRoot, Root } + +import BSONHandlers.given import Helpers.* -import lila.tree.NewRoot class PgnRoundTripTest extends munit.FunSuite: diff --git a/modules/study/src/test/StudyArbitraries.scala b/modules/study/src/test/StudyArbitraries.scala index 4dbd2ea53f7d..61a9afd443d9 100644 --- a/modules/study/src/test/StudyArbitraries.scala +++ b/modules/study/src/test/StudyArbitraries.scala @@ -1,16 +1,24 @@ package lila.study -import chess.{ Centis, Move, Square, Ply, Game as ChessGame, Situation } -import chess.{ WithMove, FromMove, Generator, GameTree, ChessTreeArbitraries, NodeArbitraries } -import chess.ChessTreeArbitraries.{ given, * } -import chess.CoreArbitraries.{ given, * } +import chess.ChessTreeArbitraries.* +import chess.CoreArbitraries.{ *, given } +import chess.format.pgn.Glyphs import chess.format.{ Fen, Uci, UciCharPair, UciPath } -import chess.format.pgn.{ Pgn, Move as PgnMove, Tags, InitialComments, Glyph, Glyphs } -import org.scalacheck.{ Arbitrary, Gen } -import chess.bitboard.Bitboard -import lila.tree.{ NewTree, NewRoot, NewBranch, Metas } -import lila.tree.Node.{ Comments, Comment, Shapes, Shape } -import org.scalacheck.Cogen +import chess.{ + Centis, + ChessTreeArbitraries, + FromMove, + Game as ChessGame, + Move, + Ply, + Situation, + Square, + WithMove +} +import org.scalacheck.{ Arbitrary, Cogen, Gen } + +import lila.tree.Node.{ Comment, Comments, Shape, Shapes } +import lila.tree.{ Metas, NewBranch, NewRoot, NewTree } object StudyArbitraries: diff --git a/modules/study/src/test/newTreeTest.scala b/modules/study/src/test/newTreeTest.scala index f019010ae478..b468a191a8e1 100644 --- a/modules/study/src/test/newTreeTest.scala +++ b/modules/study/src/test/newTreeTest.scala @@ -1,24 +1,12 @@ package lila.study +import chess.format.pgn.{ PgnStr, Tags } -import chess.{ Centis, ErrorStr, Node as PgnNode, Situation } -import chess.format.pgn.{ Glyphs, ParsedPgn, San, Tags, PgnStr, PgnNodeData, Comment as ChessComment } -import chess.format.{ Fen, Uci, UciCharPair, UciPath } -import chess.MoveOrDrop.* - -import lila.tree.Node.{ Comment, Comments, Shapes } - -import cats.syntax.all.* -import StudyArbitraries.{ *, given } -import chess.CoreArbitraries.given -import org.scalacheck.Prop.{ forAll, propBoolean } import scala.language.implicitConversions -import lila.tree.{ Branch, Branches, Root, Metas, NewTree, NewBranch, NewRoot, Node } -import chess.format.pgn.Glyph +import lila.tree.{ NewRoot, Root } class NewTreeTest extends munit.FunSuite: - import lila.tree.NewTree.* import Helpers.* given Conversion[String, PgnStr] = PgnStr(_) diff --git a/modules/studySearch/src/main/Env.scala b/modules/studySearch/src/main/Env.scala index 47fbaf15c5bc..a56309f80f76 100644 --- a/modules/studySearch/src/main/Env.scala +++ b/modules/studySearch/src/main/Env.scala @@ -2,15 +2,14 @@ package lila.studySearch import akka.actor.* import com.softwaremill.macwire.* - -import lila.common.Bus import scalalib.paginator.* -import lila.common.LateMultiThrottler + +import lila.common.{ Bus, LateMultiThrottler } import lila.core.study.RemoveStudy -import lila.study.Study import lila.search.* import lila.search.client.SearchClient import lila.search.spec.Query +import lila.study.Study final class Env( studyRepo: lila.study.StudyRepo, diff --git a/modules/studySearch/src/main/StudySearchApi.scala b/modules/studySearch/src/main/StudySearchApi.scala index 71cb3d867d42..0c61b86d539f 100644 --- a/modules/studySearch/src/main/StudySearchApi.scala +++ b/modules/studySearch/src/main/StudySearchApi.scala @@ -8,11 +8,11 @@ import java.time.LocalDate import lila.common.LateMultiThrottler import lila.search.* +import lila.search.client.SearchClient +import lila.search.spec.{ Query, StudySource } import lila.study.{ Chapter, ChapterRepo, Study, StudyRepo } import lila.tree.Node import lila.tree.Node.Comments -import lila.search.client.SearchClient -import lila.search.spec.{ Query, StudySource } final class StudySearchApi( client: SearchClient, diff --git a/modules/swiss/src/main/Env.scala b/modules/swiss/src/main/Env.scala index 0ad0ad12b374..e4da0fa93fb6 100644 --- a/modules/swiss/src/main/Env.scala +++ b/modules/swiss/src/main/Env.scala @@ -5,8 +5,8 @@ import play.api.Configuration import lila.common.LilaScheduler import lila.core.config.* -import lila.db.dsl.Coll import lila.core.socket.{ GetVersion, SocketVersion } +import lila.db.dsl.Coll @Module final class Env( diff --git a/modules/swiss/src/main/Swiss.scala b/modules/swiss/src/main/Swiss.scala index d72c62ecdafe..b72a05847551 100644 --- a/modules/swiss/src/main/Swiss.scala +++ b/modules/swiss/src/main/Swiss.scala @@ -1,12 +1,12 @@ package lila.swiss -import reactivemongo.api.bson.Macros.Annotations.Key import chess.Clock.Config as ClockConfig import chess.format.Fen +import reactivemongo.api.bson.Macros.Annotations.Key import scalalib.ThreadLocalRandom -import lila.rating.PerfType import lila.core.swiss.IdName +import lila.rating.PerfType case class Swiss( @Key("_id") id: SwissId, diff --git a/modules/swiss/src/main/SwissApi.scala b/modules/swiss/src/main/SwissApi.scala index b242ea330a0b..812c9650a9f6 100644 --- a/modules/swiss/src/main/SwissApi.scala +++ b/modules/swiss/src/main/SwissApi.scala @@ -8,18 +8,15 @@ import reactivemongo.api.bson.* import java.nio.charset.StandardCharsets.UTF_8 import java.security.MessageDigest import java.time.format.{ DateTimeFormatter, FormatStyle } -import scala.util.chaining.* import lila.common.Bus import lila.core.LightUser -import lila.db.dsl.{ *, given } - -import lila.gathering.Condition.WithVerdicts -import lila.gathering.GreatPlayer - import lila.core.round.QuietFlag import lila.core.swiss.{ IdName, SwissFinish } import lila.core.userId.UserSearch +import lila.db.dsl.{ *, given } +import lila.gathering.Condition.WithVerdicts +import lila.gathering.GreatPlayer final class SwissApi( mongo: SwissMongo, diff --git a/modules/swiss/src/main/SwissCondition.scala b/modules/swiss/src/main/SwissCondition.scala index 64a44ca3381b..904114621ecc 100644 --- a/modules/swiss/src/main/SwissCondition.scala +++ b/modules/swiss/src/main/SwissCondition.scala @@ -2,13 +2,12 @@ package lila.swiss import alleycats.Zero +import lila.core.LightUser +import lila.core.i18n.{ I18nKey, Translate } +import lila.core.user.UserApi import lila.gathering.Condition.* import lila.gathering.{ Condition, ConditionList } -import lila.core.i18n.{ I18nKey, Translate } - import lila.rating.PerfType -import lila.core.LightUser -import lila.core.user.UserApi object SwissCondition: diff --git a/modules/swiss/src/main/SwissFeature.scala b/modules/swiss/src/main/SwissFeature.scala index 68ffba6477f9..b886ab00716c 100644 --- a/modules/swiss/src/main/SwissFeature.scala +++ b/modules/swiss/src/main/SwissFeature.scala @@ -1,10 +1,11 @@ package lila.swiss import scalalib.HeapSort + +import lila.core.swiss.FeaturedIdNames import lila.db.dsl.{ *, given } import lila.memo.CacheApi import lila.memo.CacheApi.* -import lila.core.swiss.FeaturedIdNames final class SwissFeature( mongo: SwissMongo, diff --git a/modules/swiss/src/main/SwissJson.scala b/modules/swiss/src/main/SwissJson.scala index bbd05f12018d..d605acb17e65 100644 --- a/modules/swiss/src/main/SwissJson.scala +++ b/modules/swiss/src/main/SwissJson.scala @@ -5,11 +5,11 @@ import play.api.libs.json.* import lila.common.Json.given import lila.core.LightUser +import lila.core.socket.SocketVersion import lila.db.dsl.{ *, given } import lila.gathering.Condition.WithVerdicts import lila.gathering.GreatPlayer import lila.quote.Quote.given -import lila.core.socket.SocketVersion final class SwissJson( mongo: SwissMongo, @@ -23,7 +23,7 @@ final class SwissJson( import SwissJson.{ *, given } import BsonHandlers.given - import lila.gathering.ConditionHandlers.JSONHandlers.{ *, given } + import lila.gathering.ConditionHandlers.JSONHandlers.* def api(swiss: Swiss, verdicts: WithVerdicts)(using lang: Lang) = statsApi(swiss).map { stats => swissJsonBase(swiss) ++ Json.obj( diff --git a/modules/swiss/src/main/SwissNotify.scala b/modules/swiss/src/main/SwissNotify.scala index 4efd96507f73..5d55783451f7 100644 --- a/modules/swiss/src/main/SwissNotify.scala +++ b/modules/swiss/src/main/SwissNotify.scala @@ -1,8 +1,8 @@ package lila.swiss -import lila.common.{ Bus, LilaScheduler } -import lila.db.dsl.{ *, given } +import lila.common.LilaScheduler import lila.core.misc.push.TourSoon +import lila.db.dsl.{ *, given } final private class SwissNotify(mongo: SwissMongo)(using Executor, Scheduler): import BsonHandlers.given diff --git a/modules/swiss/src/main/SwissRankingApi.scala b/modules/swiss/src/main/SwissRankingApi.scala index 5ff23ff915dc..fd7178b658ab 100644 --- a/modules/swiss/src/main/SwissRankingApi.scala +++ b/modules/swiss/src/main/SwissRankingApi.scala @@ -2,10 +2,10 @@ package lila.swiss import reactivemongo.api.bson.* +import lila.core.chess.Rank +import lila.core.swiss.Ranking import lila.db.dsl.{ *, given } import lila.memo.CacheApi -import lila.core.swiss.Ranking -import lila.core.chess.Rank final private class SwissRankingApi( mongo: SwissMongo, diff --git a/modules/swiss/src/main/SwissRoundPager.scala b/modules/swiss/src/main/SwissRoundPager.scala index 0d8c83b8075a..221719f97e24 100644 --- a/modules/swiss/src/main/SwissRoundPager.scala +++ b/modules/swiss/src/main/SwissRoundPager.scala @@ -1,6 +1,7 @@ package lila.swiss import scalalib.paginator.Paginator + import lila.db.dsl.{ *, given } import lila.db.paginator.Adapter diff --git a/modules/swiss/src/main/SwissSocket.scala b/modules/swiss/src/main/SwissSocket.scala index 68f8438e1feb..204e8dad7b74 100644 --- a/modules/swiss/src/main/SwissSocket.scala +++ b/modules/swiss/src/main/SwissSocket.scala @@ -1,9 +1,9 @@ package lila.swiss import lila.common.LateMultiThrottler +import lila.core.socket.{ protocol as P, * } import lila.core.team.IsLeaderWithCommPerm import lila.room.RoomSocket.{ Protocol as RP, * } -import lila.core.socket.{ protocol as P, * } final private class SwissSocket( socketKit: SocketKit, diff --git a/modules/swiss/src/main/ui/SwissBitsUi.scala b/modules/swiss/src/main/ui/SwissBitsUi.scala index d9ecbc6b1911..1fbc5cbd5386 100644 --- a/modules/swiss/src/main/ui/SwissBitsUi.scala +++ b/modules/swiss/src/main/ui/SwissBitsUi.scala @@ -1,9 +1,7 @@ package lila.swiss package ui - -import play.api.data.Form - import lila.ui.* + import ScalatagsTemplate.{ *, given } final class SwissBitsUi(helpers: Helpers, getName: GetSwissName): diff --git a/modules/swiss/src/main/ui/SwissFormUi.scala b/modules/swiss/src/main/ui/SwissFormUi.scala index ff6fde274ab1..2c38e97daca6 100644 --- a/modules/swiss/src/main/ui/SwissFormUi.scala +++ b/modules/swiss/src/main/ui/SwissFormUi.scala @@ -1,14 +1,15 @@ package lila.swiss package ui +import chess.variant.Variant import play.api.data.Form -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.i18n.Translate -import lila.gathering.{ ConditionForm, GatheringClock } -import chess.variant.Variant +import lila.gathering.GatheringClock import lila.gathering.ui.GatheringFormUi +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class SwissFormUi(helpers: Helpers)( translatedVariantChoicesWithVariants: ( @@ -49,9 +50,6 @@ final class SwissFormUi(helpers: Helpers)( ) ) - private def advancedSettings(settings: Frag*)(using Context) = - details(summary(trans.site.advancedSettings()), settings) - private val gatheringFormUi = GatheringFormUi(helpers) def edit(swiss: Swiss, form: Form[SwissForm.SwissData])(using Context) = diff --git a/modules/swiss/src/main/ui/SwissHomeUi.scala b/modules/swiss/src/main/ui/SwissHomeUi.scala index 0a6c9dc92c74..10f7455290e0 100644 --- a/modules/swiss/src/main/ui/SwissHomeUi.scala +++ b/modules/swiss/src/main/ui/SwissHomeUi.scala @@ -2,6 +2,7 @@ package lila.swiss package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } final class SwissHomeUi(helpers: Helpers): diff --git a/modules/swiss/src/main/ui/SwissShow.scala b/modules/swiss/src/main/ui/SwissShow.scala index 5d1adcb1be4c..fa8f35274807 100644 --- a/modules/swiss/src/main/ui/SwissShow.scala +++ b/modules/swiss/src/main/ui/SwissShow.scala @@ -4,14 +4,15 @@ package ui import play.api.libs.json.* import scalalib.paginator.Paginator -import lila.ui.* -import ScalatagsTemplate.{ *, given } +import lila.common.Json.given +import lila.common.String.html.markdownLinksOrRichText +import lila.core.config.NetDomain import lila.core.team.LightTeam import lila.gathering.Condition.WithVerdicts import lila.gathering.ui.GatheringUi -import lila.common.String.html.markdownLinksOrRichText -import lila.common.Json.given -import lila.core.config.NetDomain +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class SwissShow(helpers: Helpers, ui: SwissBitsUi, gathering: GatheringUi)(using NetDomain): import helpers.{ *, given } diff --git a/modules/team/src/main/BSONHandlers.scala b/modules/team/src/main/BSONHandlers.scala index 39cb0cf352b7..f2f72b015cd7 100644 --- a/modules/team/src/main/BSONHandlers.scala +++ b/modules/team/src/main/BSONHandlers.scala @@ -2,8 +2,8 @@ package lila.team import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } import lila.core.team.{ Access, LightTeam, TeamData } +import lila.db.dsl.{ *, given } private object BSONHandlers: diff --git a/modules/team/src/main/Cached.scala b/modules/team/src/main/Cached.scala index 5827aeca9313..b17294bd5e37 100644 --- a/modules/team/src/main/Cached.scala +++ b/modules/team/src/main/Cached.scala @@ -2,10 +2,9 @@ package lila.team import reactivemongo.api.bson.BSONNull +import lila.core.team.{ Access, LightTeam } import lila.db.dsl.{ *, given } -import lila.core.team.LightTeam import lila.memo.Syncache -import lila.core.team.Access final class Cached( teamRepo: TeamRepo, diff --git a/modules/team/src/main/PaginatorBuilder.scala b/modules/team/src/main/PaginatorBuilder.scala index 4f72a024dd74..0c0a252890bb 100644 --- a/modules/team/src/main/PaginatorBuilder.scala +++ b/modules/team/src/main/PaginatorBuilder.scala @@ -1,8 +1,8 @@ package lila.team -import lila.core.LightUser - import scalalib.paginator.* + +import lila.core.LightUser import lila.db.dsl.{ *, given } import lila.db.paginator.* diff --git a/modules/team/src/main/Team.scala b/modules/team/src/main/Team.scala index 9421c13fd780..ec55351f560c 100644 --- a/modules/team/src/main/Team.scala +++ b/modules/team/src/main/Team.scala @@ -1,14 +1,12 @@ package lila.team -import scalalib.ThreadLocalRandom import reactivemongo.api.bson.Macros.Annotations.Key +import scalalib.ThreadLocalRandom import java.nio.charset.StandardCharsets.UTF_8 import java.security.MessageDigest -import lila.core.team.{ TeamData, LightTeam } - -import lila.core.team.Access +import lila.core.team.{ Access, LightTeam, TeamData } case class Team( @Key("_id") id: TeamId, // also the url slug diff --git a/modules/team/src/main/TeamApi.scala b/modules/team/src/main/TeamApi.scala index 274719926bcb..b7550cf7b6bb 100644 --- a/modules/team/src/main/TeamApi.scala +++ b/modules/team/src/main/TeamApi.scala @@ -7,12 +7,12 @@ import java.time.Period import scala.util.Try import lila.common.Bus -import lila.db.dsl.{ *, given } -import lila.core.{ timeline as tl } -import lila.memo.CacheApi.* import lila.core.perm.Granter import lila.core.team.* +import lila.core.timeline as tl import lila.core.userId.UserSearch +import lila.db.dsl.{ *, given } +import lila.memo.CacheApi.* final class TeamApi( teamRepo: TeamRepo, diff --git a/modules/team/src/main/TeamForm.scala b/modules/team/src/main/TeamForm.scala index 70c936ed7058..85e5eb6ae3b1 100644 --- a/modules/team/src/main/TeamForm.scala +++ b/modules/team/src/main/TeamForm.scala @@ -13,10 +13,10 @@ import lila.common.Form.{ numberIn, given } -import lila.db.dsl.{ *, given } -import lila.core.team.Access import lila.core.captcha.CaptchaApi +import lila.core.team.Access import lila.core.user.FlairApi +import lila.db.dsl.{ *, given } final private[team] class TeamForm(teamRepo: TeamRepo, captcha: CaptchaApi, flairApi: FlairApi)(using Executor diff --git a/modules/team/src/main/TeamMemberStream.scala b/modules/team/src/main/TeamMemberStream.scala index e573656a6427..4f9112af73a4 100644 --- a/modules/team/src/main/TeamMemberStream.scala +++ b/modules/team/src/main/TeamMemberStream.scala @@ -3,9 +3,9 @@ package lila.team import akka.stream.scaladsl.* import reactivemongo.akkastream.cursorProducer -import lila.db.dsl.{ *, given } -import lila.core.perf.UserWithPerfs import lila.core.LightUser +import lila.core.perf.UserWithPerfs +import lila.db.dsl.{ *, given } final class TeamMemberStream( memberRepo: TeamMemberRepo, diff --git a/modules/team/src/main/TeamRepo.scala b/modules/team/src/main/TeamRepo.scala index f7bdc30c2afd..3f2bba27a714 100644 --- a/modules/team/src/main/TeamRepo.scala +++ b/modules/team/src/main/TeamRepo.scala @@ -1,14 +1,13 @@ package lila.team -import reactivemongo.akkastream.cursorProducer +import reactivemongo.akkastream.{ AkkaStreamCursor, cursorProducer } import reactivemongo.api.* import reactivemongo.api.bson.* import java.time.Period +import lila.core.team.{ Access, LightTeam, TeamData } import lila.db.dsl.{ *, given } -import lila.core.team.{ LightTeam, Access, TeamData } -import reactivemongo.akkastream.AkkaStreamCursor final class TeamRepo(val coll: Coll)(using Executor): diff --git a/modules/team/src/main/TeamSecurity.scala b/modules/team/src/main/TeamSecurity.scala index 447b39bf0c12..8f7eaeedcfe1 100644 --- a/modules/team/src/main/TeamSecurity.scala +++ b/modules/team/src/main/TeamSecurity.scala @@ -3,8 +3,8 @@ package team import cats.derived.* -import lila.memo.CacheApi.* import lila.core.perm.Granter +import lila.memo.CacheApi.* object TeamSecurity: enum Permission(val name: String, val desc: String) derives Eq: diff --git a/modules/team/src/main/TeamSocket.scala b/modules/team/src/main/TeamSocket.scala index 764ac4b44440..ffed305f68c7 100644 --- a/modules/team/src/main/TeamSocket.scala +++ b/modules/team/src/main/TeamSocket.scala @@ -1,7 +1,7 @@ package lila.team -import lila.room.RoomSocket.{ Protocol as RP, * } import lila.core.socket.{ protocol as P, * } +import lila.room.RoomSocket.{ Protocol as RP, * } final private class TeamSocket( socketKit: SocketKit, diff --git a/modules/team/src/main/ui/AdminUi.scala b/modules/team/src/main/ui/AdminUi.scala index a6414f4523a0..a61d91c92597 100644 --- a/modules/team/src/main/ui/AdminUi.scala +++ b/modules/team/src/main/ui/AdminUi.scala @@ -3,9 +3,10 @@ package ui import play.api.data.{ Field, Form } +import lila.core.config.NetDomain import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.config.NetDomain final class AdminUi(helpers: Helpers, bits: TeamUi)(using netDomain: NetDomain): import helpers.{ *, given } diff --git a/modules/team/src/main/ui/FormUi.scala b/modules/team/src/main/ui/FormUi.scala index 580917dc6e18..5d9e5e374ccd 100644 --- a/modules/team/src/main/ui/FormUi.scala +++ b/modules/team/src/main/ui/FormUi.scala @@ -1,13 +1,13 @@ package lila.team package ui -import play.api.data.{ Form, Field } -import scalalib.paginator.Paginator +import play.api.data.{ Field, Form } -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.captcha.Captcha import lila.core.team.Access +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class FormUi(helpers: Helpers, bits: TeamUi)( renderCaptcha: (Form[?] | Field, Captcha) => Context ?=> Frag diff --git a/modules/team/src/main/ui/RequestUi.scala b/modules/team/src/main/ui/RequestUi.scala index 28f00b11f4a6..ba010dbf66ce 100644 --- a/modules/team/src/main/ui/RequestUi.scala +++ b/modules/team/src/main/ui/RequestUi.scala @@ -5,6 +5,7 @@ import play.api.data.Form import scalalib.paginator.Paginator import lila.ui.* + import ScalatagsTemplate.{ *, given } final class RequestUi(helpers: Helpers, bits: TeamUi): diff --git a/modules/team/src/main/ui/TeamUi.scala b/modules/team/src/main/ui/TeamUi.scala index 144f56a5a449..15fe3c71bf8a 100644 --- a/modules/team/src/main/ui/TeamUi.scala +++ b/modules/team/src/main/ui/TeamUi.scala @@ -3,10 +3,10 @@ package ui import scalalib.paginator.Paginator +import lila.common.MarkdownRender import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.common.MarkdownRender -import lila.core.team.LightTeam final class TeamUi(helpers: Helpers)(using Executor): import helpers.{ *, given } diff --git a/modules/teamSearch/src/main/Env.scala b/modules/teamSearch/src/main/Env.scala index 306435a7f413..b9282d3e152a 100644 --- a/modules/teamSearch/src/main/Env.scala +++ b/modules/teamSearch/src/main/Env.scala @@ -1,9 +1,8 @@ package lila.teamSearch import com.softwaremill.macwire.* - import scalalib.paginator.Paginator -import lila.core.config.ConfigName + import lila.search.client.SearchClient import lila.search.spec.Query diff --git a/modules/timeline/src/main/Entry.scala b/modules/timeline/src/main/Entry.scala index a8abcff823f4..fea904b23df5 100644 --- a/modules/timeline/src/main/Entry.scala +++ b/modules/timeline/src/main/Entry.scala @@ -4,8 +4,8 @@ import play.api.libs.json.* import reactivemongo.api.bson.* import lila.common.Json.given -import lila.db.dsl.{ *, given } import lila.core.timeline.* +import lila.db.dsl.{ *, given } case class Entry( _id: BSONObjectID, diff --git a/modules/timeline/src/main/EntryApi.scala b/modules/timeline/src/main/EntryApi.scala index 284f0ff84126..3c27615aea67 100644 --- a/modules/timeline/src/main/EntryApi.scala +++ b/modules/timeline/src/main/EntryApi.scala @@ -2,8 +2,8 @@ package lila.timeline import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } import lila.core.timeline.Atom +import lila.db.dsl.{ *, given } import lila.memo.CacheApi.* final class EntryApi( diff --git a/modules/timeline/src/main/TimelineApi.scala b/modules/timeline/src/main/TimelineApi.scala index f50a09623371..1705cd97fa79 100644 --- a/modules/timeline/src/main/TimelineApi.scala +++ b/modules/timeline/src/main/TimelineApi.scala @@ -1,8 +1,4 @@ package lila.timeline - -import akka.actor.* - -import lila.core.timeline.{ Atom, Propagate, Propagation, ReloadTimelines } import lila.core.perm.Permission import lila.core.team.Access import lila.core.timeline.* diff --git a/modules/timeline/src/main/TimelineUi.scala b/modules/timeline/src/main/TimelineUi.scala index 28ff1c4b6a48..d24c16bd72ef 100644 --- a/modules/timeline/src/main/TimelineUi.scala +++ b/modules/timeline/src/main/TimelineUi.scala @@ -1,15 +1,15 @@ package lila.timeline package ui +import lila.core.timeline.* import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.timeline.* final class TimelineUi(helpers: Helpers)( streamerLink: UserStr => Tag ): import helpers.{ *, given } - import trans.{ team as trt } def entries(entries: Vector[Entry])(using Context) = div(cls := "entries"): diff --git a/modules/title/src/main/Env.scala b/modules/title/src/main/Env.scala index 146e4a7291aa..9c784a8c1017 100644 --- a/modules/title/src/main/Env.scala +++ b/modules/title/src/main/Env.scala @@ -2,8 +2,8 @@ package lila.title import com.softwaremill.macwire.* -import lila.core.lilaism.Lilaism.* import lila.core.config.CollName +import lila.core.lilaism.Lilaism.* @Module final class Env(cacheApi: lila.memo.CacheApi, db: lila.db.Db, picfitApi: lila.memo.PicfitApi)(using diff --git a/modules/title/src/main/TitleApi.scala b/modules/title/src/main/TitleApi.scala index bf6ce36adb4f..aaf10b19504c 100644 --- a/modules/title/src/main/TitleApi.scala +++ b/modules/title/src/main/TitleApi.scala @@ -2,12 +2,12 @@ package lila.title import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } -import lila.core.perm.Granter +import lila.core.config.BaseUrl import lila.core.id.TitleRequestId -import lila.memo.PicfitApi import lila.core.msg.SystemMsg -import lila.core.config.BaseUrl +import lila.core.perm.Granter +import lila.db.dsl.{ *, given } +import lila.memo.PicfitApi final class TitleApi(coll: Coll, picfitApi: PicfitApi)(using Executor, BaseUrl): diff --git a/modules/title/src/main/TitleForm.scala b/modules/title/src/main/TitleForm.scala index 5ee992b7b6c5..6bc353d7c77e 100644 --- a/modules/title/src/main/TitleForm.scala +++ b/modules/title/src/main/TitleForm.scala @@ -1,11 +1,10 @@ package lila.title +import chess.FideId import play.api.data.* import play.api.data.Forms.* -import chess.FideId -import lila.common.Form.{ cleanNonEmptyText, playerTitle, fideId, into, url, stringIn } -import lila.core.id.ImageId +import lila.common.Form.{ cleanNonEmptyText, fideId, playerTitle, stringIn, url } object TitleForm: diff --git a/modules/title/src/main/TitleRequest.scala b/modules/title/src/main/TitleRequest.scala index 0d97323d3948..b2fd4b219b2d 100644 --- a/modules/title/src/main/TitleRequest.scala +++ b/modules/title/src/main/TitleRequest.scala @@ -1,13 +1,12 @@ package lila.title +import chess.{ FideId, PlayerTitle } +import io.mola.galimatias.URL +import monocle.syntax.all.* import reactivemongo.api.bson.Macros.Annotations.Key -import chess.{ PlayerTitle, FideId } import scalalib.ThreadLocalRandom -import monocle.syntax.all.* -import lila.core.id.ImageId -import io.mola.galimatias.URL -import lila.core.id.TitleRequestId +import lila.core.id.{ ImageId, TitleRequestId } case class TitleRequest( @Key("_id") id: TitleRequestId, diff --git a/modules/title/src/main/ui/TitleModUi.scala b/modules/title/src/main/ui/TitleModUi.scala index 1f3451b2c7d8..dde4097cc080 100644 --- a/modules/title/src/main/ui/TitleModUi.scala +++ b/modules/title/src/main/ui/TitleModUi.scala @@ -1,10 +1,11 @@ package lila.title package ui -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.config.NetDomain import lila.core.id.ImageId +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class TitleModUi(helpers: Helpers)(ui: TitleUi, picfitUrl: lila.core.misc.PicfitUrl)(using NetDomain): import helpers.{ *, given } diff --git a/modules/title/src/main/ui/TitleUi.scala b/modules/title/src/main/ui/TitleUi.scala index 03dbb0848369..ffd2b5c28365 100644 --- a/modules/title/src/main/ui/TitleUi.scala +++ b/modules/title/src/main/ui/TitleUi.scala @@ -1,24 +1,17 @@ package lila.title package ui -import play.api.data.Form -import play.api.libs.json.* import chess.PlayerTitle +import play.api.data.Form +import lila.core.id.ImageId import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.id.TitleRequestId -import lila.core.id.ImageId final class TitleUi(helpers: Helpers)(picfitUrl: lila.core.misc.PicfitUrl): import helpers.{ *, given } - private def layout(title: String = "Title verification")(using Context) = - Page(title) - .css("bits.titleRequest") - .wrap: body => - main(cls := "box box-pad page")(body) - def index(page: Page, intro: Frag)(using Context) = page.css("bits.page"): frag( @@ -114,7 +107,6 @@ Today's date is [current date]""") def statusFlair(req: TitleRequest)(using Context) = iconFlair: Flair: - import TitleRequest.Status req.status.name match case "approved" => "activity.sparkles" case "rejected" => "symbols.cross-mark" diff --git a/modules/tournament/src/main/ApiJsonView.scala b/modules/tournament/src/main/ApiJsonView.scala index deb4385198b1..ee84ff8f4293 100644 --- a/modules/tournament/src/main/ApiJsonView.scala +++ b/modules/tournament/src/main/ApiJsonView.scala @@ -3,10 +3,10 @@ package lila.tournament import play.api.libs.json.* import lila.common.Json.given +import lila.core.i18n.Translate import lila.gathering.Condition import lila.gathering.ConditionHandlers.JSONHandlers.given import lila.rating.PerfType -import lila.core.i18n.Translate final class ApiJsonView(lightUserApi: lila.core.user.LightUserApi)(using Executor): diff --git a/modules/tournament/src/main/AutoPairing.scala b/modules/tournament/src/main/AutoPairing.scala index 87f91b5c76dc..df23c28c0644 100644 --- a/modules/tournament/src/main/AutoPairing.scala +++ b/modules/tournament/src/main/AutoPairing.scala @@ -1,7 +1,7 @@ package lila.tournament -import monocle.syntax.all.* import chess.{ Black, ByColor, Color, White } +import monocle.syntax.all.* import lila.core.game.Source diff --git a/modules/tournament/src/main/BSONHandlers.scala b/modules/tournament/src/main/BSONHandlers.scala index 17cc827077d4..90750cbbeac7 100644 --- a/modules/tournament/src/main/BSONHandlers.scala +++ b/modules/tournament/src/main/BSONHandlers.scala @@ -5,13 +5,13 @@ import chess.format.Fen import chess.variant.Variant import reactivemongo.api.bson.* +import lila.core.id.TourPlayerId +import lila.core.tournament.Status +import lila.core.tournament.leaderboard.Ratio import lila.db.BSON import lila.db.dsl.{ *, given } -import lila.rating.PerfType -import lila.core.tournament.leaderboard.Ratio -import lila.core.tournament.Status -import lila.core.id.TourPlayerId import lila.gathering.Thematic +import lila.rating.PerfType object BSONHandlers: diff --git a/modules/tournament/src/main/JsonView.scala b/modules/tournament/src/main/JsonView.scala index 180e5b010c17..9405fe7be86f 100644 --- a/modules/tournament/src/main/JsonView.scala +++ b/modules/tournament/src/main/JsonView.scala @@ -6,21 +6,20 @@ import play.api.i18n.Lang import play.api.libs.json.* import lila.common.Json.given +import lila.common.Json.lightUser.writeNoId import lila.common.Uptime import lila.core.LightUser +import lila.core.chess.Rank +import lila.core.data.Preload +import lila.core.game.LightPov +import lila.core.i18n.Translate +import lila.core.socket.SocketVersion +import lila.core.user.LightUserApi import lila.gathering.{ Condition, ConditionHandlers, GreatPlayer } import lila.memo.CacheApi.* import lila.memo.SettingStore -import lila.ui.Icon.iconWrites - -import lila.core.socket.SocketVersion -import lila.core.i18n.Translate -import lila.core.data.Preload -import lila.common.Json.lightUser.writeNoId import lila.rating.PerfType -import lila.core.chess.Rank -import lila.core.user.LightUserApi -import lila.core.game.LightPov +import lila.ui.Icon.iconWrites final class JsonView( lightUserApi: LightUserApi, diff --git a/modules/tournament/src/main/LeaderboardApi.scala b/modules/tournament/src/main/LeaderboardApi.scala index b6f9eab37fb3..1218e8a2ee16 100644 --- a/modules/tournament/src/main/LeaderboardApi.scala +++ b/modules/tournament/src/main/LeaderboardApi.scala @@ -4,11 +4,10 @@ import reactivemongo.api.bson.* import scalalib.Maths import scalalib.paginator.{ AdapterLike, Paginator } -import lila.db.dsl.{ *, given } - +import lila.core.chess.Rank import lila.core.perf.PerfId +import lila.db.dsl.{ *, given } import lila.rating.PerfType -import lila.core.chess.Rank final class LeaderboardApi( repo: LeaderboardRepo, diff --git a/modules/tournament/src/main/LeaderboardIndexer.scala b/modules/tournament/src/main/LeaderboardIndexer.scala index 33d3e2b41ebe..5f838c79f66d 100644 --- a/modules/tournament/src/main/LeaderboardIndexer.scala +++ b/modules/tournament/src/main/LeaderboardIndexer.scala @@ -3,8 +3,8 @@ package lila.tournament import reactivemongo.api.* import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } import lila.core.tournament.leaderboard.Ratio +import lila.db.dsl.{ *, given } final private class LeaderboardIndexer( pairingRepo: PairingRepo, diff --git a/modules/tournament/src/main/PlayerRepo.scala b/modules/tournament/src/main/PlayerRepo.scala index 3ea548702ed6..3529c5b55331 100644 --- a/modules/tournament/src/main/PlayerRepo.scala +++ b/modules/tournament/src/main/PlayerRepo.scala @@ -4,12 +4,11 @@ import reactivemongo.akkastream.{ AkkaStreamCursor, cursorProducer } import reactivemongo.api.* import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } -import lila.tournament.BSONHandlers.given - -import lila.core.userId.UserSearch import lila.core.chess.Rank import lila.core.user.WithPerf +import lila.core.userId.UserSearch +import lila.db.dsl.{ *, given } +import lila.tournament.BSONHandlers.given final class PlayerRepo(private[tournament] val coll: Coll)(using Executor): diff --git a/modules/tournament/src/main/Revolution.scala b/modules/tournament/src/main/Revolution.scala index 868d0f61fc09..f39480f821da 100644 --- a/modules/tournament/src/main/Revolution.scala +++ b/modules/tournament/src/main/Revolution.scala @@ -2,11 +2,10 @@ package lila.tournament import chess.variant.Variant +import lila.core.tournament.Status import lila.db.dsl.{ *, given } import lila.memo.CacheApi.* -import lila.core.tournament.Status - final class RevolutionApi( tournamentRepo: TournamentRepo, cacheApi: lila.memo.CacheApi diff --git a/modules/tournament/src/main/Schedule.scala b/modules/tournament/src/main/Schedule.scala index e1506cb38cd6..4aea1d0e0ba9 100644 --- a/modules/tournament/src/main/Schedule.scala +++ b/modules/tournament/src/main/Schedule.scala @@ -5,9 +5,8 @@ import chess.Clock.{ IncrementSeconds, LimitSeconds } import chess.format.Fen import chess.variant.Variant -import lila.gathering.Condition import lila.core.i18n.{ I18nKey, Translate } -import lila.rating.PerfType +import lila.gathering.Condition case class Schedule( freq: Schedule.Freq, diff --git a/modules/tournament/src/main/Spotlight.scala b/modules/tournament/src/main/Spotlight.scala index 9774150fb2bc..f963b105930e 100644 --- a/modules/tournament/src/main/Spotlight.scala +++ b/modules/tournament/src/main/Spotlight.scala @@ -1,10 +1,10 @@ package lila.tournament import scalalib.HeapSort.topN -import lila.ui.Icon import lila.core.LightUser import lila.core.perf.UserWithPerfs +import lila.ui.Icon case class Spotlight( headline: String, diff --git a/modules/tournament/src/main/Tournament.scala b/modules/tournament/src/main/Tournament.scala index 9703f16126b8..9c08d12aec32 100644 --- a/modules/tournament/src/main/Tournament.scala +++ b/modules/tournament/src/main/Tournament.scala @@ -5,12 +5,10 @@ import chess.format.Fen import chess.{ Mode, Speed } import scalalib.ThreadLocalRandom -import lila.gathering.GreatPlayer -import lila.core.i18n.defaultLang -import lila.rating.PerfType -import lila.gathering.Thematic import lila.core.i18n.Translate import lila.core.tournament.Status +import lila.gathering.{ GreatPlayer, Thematic } +import lila.rating.PerfType case class Tournament( id: TourId, diff --git a/modules/tournament/src/main/TournamentApi.scala b/modules/tournament/src/main/TournamentApi.scala index 9fc230e88b0e..4b5bae47ebe1 100644 --- a/modules/tournament/src/main/TournamentApi.scala +++ b/modules/tournament/src/main/TournamentApi.scala @@ -3,19 +3,18 @@ package lila.tournament import akka.stream.scaladsl.* import com.roundeights.hasher.Algo import play.api.libs.json.* +import scalalib.paginator.Paginator import java.nio.charset.StandardCharsets.UTF_8 import java.security.MessageDigest -import scalalib.paginator.Paginator import lila.common.{ Bus, Debouncer } -import lila.gathering.Condition -import lila.gathering.Condition.GetMyTeamIds -import lila.core.team.LightTeam +import lila.core.game.LightPov import lila.core.round.{ AbortForce, GoBerserk } -import lila.tournament.TeamBattle.TeamInfo +import lila.core.team.LightTeam import lila.core.tournament.Status -import lila.core.game.LightPov +import lila.gathering.Condition +import lila.gathering.Condition.GetMyTeamIds final class TournamentApi( cached: TournamentCache, diff --git a/modules/tournament/src/main/TournamentCondition.scala b/modules/tournament/src/main/TournamentCondition.scala index 440acb2bc5c0..1c9ca6cbf78a 100644 --- a/modules/tournament/src/main/TournamentCondition.scala +++ b/modules/tournament/src/main/TournamentCondition.scala @@ -2,14 +2,12 @@ package lila.tournament import alleycats.Zero -import lila.gathering.Condition.* -import lila.gathering.{ Condition, ConditionList } import lila.core.history.HistoryApi import lila.core.team.LightTeam - -import lila.rating.PerfType import lila.core.user.UserApi -import scalalib.model.Days +import lila.gathering.Condition.* +import lila.gathering.{ Condition, ConditionList } +import lila.rating.PerfType object TournamentCondition: diff --git a/modules/tournament/src/main/TournamentForm.scala b/modules/tournament/src/main/TournamentForm.scala index 27fe95b9835f..1869f977541a 100644 --- a/modules/tournament/src/main/TournamentForm.scala +++ b/modules/tournament/src/main/TournamentForm.scala @@ -7,9 +7,9 @@ import play.api.data.* import play.api.data.Forms.* import lila.common.Form.{ *, given } -import lila.gathering.GatheringClock -import lila.core.team.LightTeam import lila.core.perm.Granter +import lila.core.team.LightTeam +import lila.gathering.GatheringClock final class TournamentForm: diff --git a/modules/tournament/src/main/TournamentModeration.scala b/modules/tournament/src/main/TournamentModeration.scala index 40a9d427b908..9cfe5059b0b2 100644 --- a/modules/tournament/src/main/TournamentModeration.scala +++ b/modules/tournament/src/main/TournamentModeration.scala @@ -3,8 +3,8 @@ package lila.tournament import reactivemongo.api.* import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } import lila.core.user.UserRepo +import lila.db.dsl.{ *, given } final class TournamentModeration(playerRepo: PlayerRepo, userRepo: UserRepo)(using Executor): import userRepo.given diff --git a/modules/tournament/src/main/TournamentRepo.scala b/modules/tournament/src/main/TournamentRepo.scala index b998ecffcda2..b4de5214e2b1 100644 --- a/modules/tournament/src/main/TournamentRepo.scala +++ b/modules/tournament/src/main/TournamentRepo.scala @@ -4,9 +4,8 @@ import chess.variant.Variant import reactivemongo.akkastream.{ AkkaStreamCursor, cursorProducer } import lila.core.config.CollName -import lila.db.dsl.{ *, given } - import lila.core.tournament.Status +import lila.db.dsl.{ *, given } final class TournamentRepo(val coll: Coll, playerCollName: CollName)(using Executor): import BSONHandlers.given diff --git a/modules/tournament/src/main/TournamentScheduler.scala b/modules/tournament/src/main/TournamentScheduler.scala index 75bcbecc8c91..d4d9dcad1ef0 100644 --- a/modules/tournament/src/main/TournamentScheduler.scala +++ b/modules/tournament/src/main/TournamentScheduler.scala @@ -8,8 +8,8 @@ import java.time.temporal.TemporalAdjusters import java.time.{ LocalDate, LocalDateTime } import lila.common.LilaScheduler -import lila.gathering.Condition import lila.core.i18n.Translator +import lila.gathering.Condition final private class TournamentScheduler(tournamentRepo: TournamentRepo)(using Executor, diff --git a/modules/tournament/src/main/TournamentShield.scala b/modules/tournament/src/main/TournamentShield.scala index 9a76af39ca61..51ce6c083944 100644 --- a/modules/tournament/src/main/TournamentShield.scala +++ b/modules/tournament/src/main/TournamentShield.scala @@ -2,10 +2,10 @@ package lila.tournament import chess.variant.Variant.given -import lila.ui.Icon +import lila.core.tournament.Status import lila.db.dsl.* import lila.memo.CacheApi.* -import lila.core.tournament.Status +import lila.ui.Icon final class TournamentShieldApi( tournamentRepo: TournamentRepo, diff --git a/modules/tournament/src/main/TournamentSocket.scala b/modules/tournament/src/main/TournamentSocket.scala index 3b59f32d95e9..816f2d41f377 100644 --- a/modules/tournament/src/main/TournamentSocket.scala +++ b/modules/tournament/src/main/TournamentSocket.scala @@ -4,8 +4,8 @@ import akka.actor.* import lila.common.Json.given import lila.common.LateMultiThrottler -import lila.room.RoomSocket.{ Protocol as RP, * } import lila.core.socket.{ protocol as P, * } +import lila.room.RoomSocket.{ Protocol as RP, * } final private class TournamentSocket( repo: TournamentRepo, diff --git a/modules/tournament/src/main/TournamentStandingApi.scala b/modules/tournament/src/main/TournamentStandingApi.scala index 67ec89c76342..09665213a9af 100644 --- a/modules/tournament/src/main/TournamentStandingApi.scala +++ b/modules/tournament/src/main/TournamentStandingApi.scala @@ -3,8 +3,8 @@ package lila.tournament import akka.stream.scaladsl.* import play.api.libs.json.* -import lila.memo.CacheApi.* import lila.core.chess.Rank +import lila.memo.CacheApi.* /* * Getting a standing page of a tournament can be very expensive diff --git a/modules/tournament/src/main/WaitingUsers.scala b/modules/tournament/src/main/WaitingUsers.scala index 03e19f5cf1c9..1eb7c52a5dd8 100644 --- a/modules/tournament/src/main/WaitingUsers.scala +++ b/modules/tournament/src/main/WaitingUsers.scala @@ -1,7 +1,6 @@ package lila.tournament import chess.Clock.Config as TournamentClock - import scalalib.cache.ExpireSetMemo private case class WaitingUsers( diff --git a/modules/tournament/src/main/crud/CrudApi.scala b/modules/tournament/src/main/crud/CrudApi.scala index 4644ef354a59..4c94e3ffc053 100644 --- a/modules/tournament/src/main/crud/CrudApi.scala +++ b/modules/tournament/src/main/crud/CrudApi.scala @@ -2,8 +2,8 @@ package lila.tournament package crud import chess.Mode - import scalalib.paginator.Paginator + import lila.db.dsl.* import lila.db.paginator.Adapter import lila.tournament.BSONHandlers.given diff --git a/modules/tournament/src/main/model.scala b/modules/tournament/src/main/model.scala index ade303e70730..0472d7931de0 100644 --- a/modules/tournament/src/main/model.scala +++ b/modules/tournament/src/main/model.scala @@ -1,6 +1,7 @@ package lila.tournament import play.api.i18n.Lang + import lila.core.chess.Rank final class LeaderboardRepo(val coll: lila.db.dsl.Coll) diff --git a/modules/tournament/src/main/ui/ModerationUi.scala b/modules/tournament/src/main/ui/ModerationUi.scala index ea8f3ec657c9..84aef06274f7 100644 --- a/modules/tournament/src/main/ui/ModerationUi.scala +++ b/modules/tournament/src/main/ui/ModerationUi.scala @@ -2,6 +2,7 @@ package lila.tournament package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } final class ModerationUi(helpers: Helpers, ui: TournamentUi): diff --git a/modules/tournament/src/main/ui/TeamBattleUi.scala b/modules/tournament/src/main/ui/TeamBattleUi.scala index 1d96b692d09f..89a29eec1f97 100644 --- a/modules/tournament/src/main/ui/TeamBattleUi.scala +++ b/modules/tournament/src/main/ui/TeamBattleUi.scala @@ -3,9 +3,10 @@ package ui import play.api.data.Form +import lila.core.team.LightTeam import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.team.LightTeam final class TeamBattleUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/tournament/src/main/ui/TournamentForm.scala b/modules/tournament/src/main/ui/TournamentForm.scala index cff2e2fe5f71..55a4d1367ef0 100644 --- a/modules/tournament/src/main/ui/TournamentForm.scala +++ b/modules/tournament/src/main/ui/TournamentForm.scala @@ -4,13 +4,14 @@ package ui import play.api.data.* import scalalib.paginator.Paginator -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.i18n.Translate -import lila.gathering.{ ConditionForm, GatheringClock } -import lila.gathering.ui.GatheringFormUi import lila.core.team.LightTeam +import lila.gathering.GatheringClock +import lila.gathering.ui.GatheringFormUi import lila.tournament.crud.CrudForm +import lila.ui.* + +import ScalatagsTemplate.{ *, given } opaque type FormPrefix = Option[String] object FormPrefix extends TotalWrapper[FormPrefix, Option[String]]: diff --git a/modules/tournament/src/main/ui/TournamentList.scala b/modules/tournament/src/main/ui/TournamentList.scala index b68658369a3e..8284c9cdaa1e 100644 --- a/modules/tournament/src/main/ui/TournamentList.scala +++ b/modules/tournament/src/main/ui/TournamentList.scala @@ -4,10 +4,11 @@ package ui import play.api.libs.json.* import scalalib.paginator.Paginator +import lila.rating.PerfType +import lila.tournament.Schedule.Freq import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.tournament.Schedule.Freq -import lila.rating.PerfType final class TournamentList(helpers: Helpers, ui: TournamentUi)( communityMenu: Context ?=> Frag, diff --git a/modules/tournament/src/main/ui/TournamentShow.scala b/modules/tournament/src/main/ui/TournamentShow.scala index 2a5813cf11a5..d341e858e53b 100644 --- a/modules/tournament/src/main/ui/TournamentShow.scala +++ b/modules/tournament/src/main/ui/TournamentShow.scala @@ -1,16 +1,15 @@ package lila.tournament package ui - -import play.api.data.Form import play.api.libs.json.* -import lila.ui.* -import ScalatagsTemplate.{ *, given } -import lila.core.team.LightTeam -import lila.common.String.html.markdownLinksOrRichText import lila.common.Json.given +import lila.common.String.html.markdownLinksOrRichText import lila.core.config.NetDomain +import lila.core.team.LightTeam import lila.gathering.ui.GatheringUi +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class TournamentShow(helpers: Helpers, ui: TournamentUi, gathering: GatheringUi)( variantTeamLinks: Map[chess.variant.Variant.LilaKey, (LightTeam, Frag)] diff --git a/modules/tournament/src/main/ui/TournamentUi.scala b/modules/tournament/src/main/ui/TournamentUi.scala index 23918b9cbab0..8edf7a38dddc 100644 --- a/modules/tournament/src/main/ui/TournamentUi.scala +++ b/modules/tournament/src/main/ui/TournamentUi.scala @@ -1,10 +1,11 @@ package lila.tournament package ui +import lila.core.i18n.Translate +import lila.rating.PerfType import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.rating.PerfType -import lila.core.i18n.Translate final class TournamentUi(helpers: Helpers)(getTourName: GetTourName): import helpers.{ *, given } diff --git a/modules/tournament/src/main/ui/UserTournament.scala b/modules/tournament/src/main/ui/UserTournament.scala index e496ffdb9c14..56047a22c8b6 100644 --- a/modules/tournament/src/main/ui/UserTournament.scala +++ b/modules/tournament/src/main/ui/UserTournament.scala @@ -3,10 +3,10 @@ package ui import scalalib.paginator.Paginator +import lila.core.i18n.Translate import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.rating.PerfType -import lila.core.i18n.Translate final class UserTournament(helpers: Helpers, ui: TournamentUi): import helpers.{ *, given } diff --git a/modules/tree/src/main/Analysis.scala b/modules/tree/src/main/Analysis.scala index 4b14d18d1d7c..55daed807582 100644 --- a/modules/tree/src/main/Analysis.scala +++ b/modules/tree/src/main/Analysis.scala @@ -1,8 +1,8 @@ package lila.tree -import play.api.libs.json.JsObject -import chess.{ Color, Ply } import chess.format.pgn.{ Pgn, PgnStr } +import chess.{ Color, Ply } +import play.api.libs.json.JsObject case class AnalysisProgress(payload: () => JsObject) case class StudyAnalysisProgress(analysis: Analysis, complete: Boolean) diff --git a/modules/tree/src/main/ParseImport.scala b/modules/tree/src/main/ParseImport.scala index 0cf3ef508b71..fb96f4eefc49 100644 --- a/modules/tree/src/main/ParseImport.scala +++ b/modules/tree/src/main/ParseImport.scala @@ -2,10 +2,8 @@ package lila.tree import chess.format.Fen import chess.format.pgn.{ ParsedPgn, Parser, PgnStr, Reader, Sans } -import chess.{ Game as ChessGame, * } import chess.variant.* - -import lila.core.userId.UserId +import chess.{ Game as ChessGame, * } case class TagResult(status: Status, winner: Option[Color]): // duplicated from Game.finish diff --git a/modules/tree/src/main/StatusText.scala b/modules/tree/src/main/StatusText.scala index f90151f5d32c..ec7987341b54 100644 --- a/modules/tree/src/main/StatusText.scala +++ b/modules/tree/src/main/StatusText.scala @@ -1,7 +1,7 @@ package lila.tree -import chess.{ Color, Status } import chess.variant.Variant +import chess.{ Color, Status } object StatusText: diff --git a/modules/tree/src/main/eval.scala b/modules/tree/src/main/eval.scala index 1a58ca8247c2..bf8dff656b82 100644 --- a/modules/tree/src/main/eval.scala +++ b/modules/tree/src/main/eval.scala @@ -1,7 +1,7 @@ package lila.tree import cats.data.NonEmptyList -import chess.format.{ Uci, Fen } +import chess.format.{ Fen, Uci } import chess.variant.Variant case class Eval(cp: Option[Eval.Cp], mate: Option[Eval.Mate], best: Option[Uci]): diff --git a/modules/tree/src/main/newTree.scala b/modules/tree/src/main/newTree.scala index 041c99a83665..a754178f4f57 100644 --- a/modules/tree/src/main/newTree.scala +++ b/modules/tree/src/main/newTree.scala @@ -1,18 +1,14 @@ package lila.tree - -import alleycats.Zero -import monocle.syntax.all.* - -import chess.{ Centis, HasId, Situation, Node as ChessNode, Variation, Ply, Square, Check, Mergeable, Tree } -import chess.format.{ Fen, Uci, UciCharPair, UciPath } +import chess.bitboard.Bitboard import chess.format.pgn.{ Glyph, Glyphs } +import chess.format.{ Fen, Uci, UciCharPair, UciPath } +import chess.json.Json.given import chess.opening.Opening -import chess.variant.{ Variant, Crazyhouse } -import chess.bitboard.Bitboard - +import chess.variant.{ Crazyhouse, Variant } +import chess.{ Centis, Check, HasId, Mergeable, Node as ChessNode, Ply, Situation, Square, Tree, Variation } +import monocle.syntax.all.* import play.api.libs.json.* import scalalib.json.Json.{ *, given } -import chess.json.Json.given import Node.{ Comments, Comment, Gamebook, Shapes } @@ -179,7 +175,6 @@ object NewTree: // def fromNodeToBranch(node: Node): NewBranch = ??? case class NewRoot(metas: Metas, tree: Option[NewTree]): - import NewRoot.* import NewTree.* export metas.{ diff --git a/modules/tree/src/main/tree.scala b/modules/tree/src/main/tree.scala index ae6c909414f6..e6d5eca31d43 100644 --- a/modules/tree/src/main/tree.scala +++ b/modules/tree/src/main/tree.scala @@ -1,19 +1,16 @@ package lila.tree import alleycats.Zero -import chess.Centis +import chess.bitboard.Bitboard import chess.format.pgn.{ Glyph, Glyphs } import chess.format.{ Fen, Uci, UciCharPair, UciPath } import chess.opening.Opening -import chess.{ Ply, Square, Check } -import chess.bitboard.Bitboard -import chess.variant.{ Variant, Crazyhouse } +import chess.variant.{ Crazyhouse, Variant } +import chess.{ Centis, Check, Ply, Square } import play.api.libs.json.* -import scalalib.ThreadLocalRandom import scalalib.StringOps.softCleanUp - +import scalalib.ThreadLocalRandom import scalalib.json.Json.{ *, given } -import chess.json.Json.given import Node.{ Comments, Comment, Gamebook, Shapes } diff --git a/modules/tutor/src/main/Env.scala b/modules/tutor/src/main/Env.scala index 8de5fda5f9ee..d2efff1b2523 100644 --- a/modules/tutor/src/main/Env.scala +++ b/modules/tutor/src/main/Env.scala @@ -4,8 +4,8 @@ import com.softwaremill.macwire.* import com.softwaremill.tagging.* import lila.core.config -import lila.db.dsl.Coll import lila.core.fishnet.{ AnalysisAwaiter, FishnetRequest } +import lila.db.dsl.Coll import lila.memo.CacheApi @Module diff --git a/modules/tutor/src/main/TutorApi.scala b/modules/tutor/src/main/TutorApi.scala index 3ee47dca1060..e76ddf388d66 100644 --- a/modules/tutor/src/main/TutorApi.scala +++ b/modules/tutor/src/main/TutorApi.scala @@ -1,9 +1,9 @@ package lila.tutor import lila.common.{ Chronometer, LilaScheduler, Uptime } +import lila.core.perf.UserWithPerfs import lila.db.dsl.{ *, given } import lila.memo.CacheApi -import lila.core.perf.UserWithPerfs final class TutorApi( colls: TutorColls, diff --git a/modules/tutor/src/main/TutorBuilder.scala b/modules/tutor/src/main/TutorBuilder.scala index d8260ab26964..c633d743b1ea 100644 --- a/modules/tutor/src/main/TutorBuilder.scala +++ b/modules/tutor/src/main/TutorBuilder.scala @@ -1,5 +1,6 @@ package lila.tutor +import lila.core.perf.{ PerfKey, UserWithPerfs } import lila.db.dsl.{ *, given } import lila.insight.{ Answer as InsightAnswer, @@ -12,8 +13,6 @@ import lila.insight.{ Question } import lila.rating.PerfType -import lila.core.perf.UserWithPerfs -import lila.core.perf.PerfKey final private class TutorBuilder( colls: TutorColls, @@ -24,7 +23,6 @@ final private class TutorBuilder( )(using Executor): import TutorBsonHandlers.given - import TutorBuilder.* private given InsightApi = insightApi val maxTime = fishnet.maxTime + 5.minutes diff --git a/modules/tutor/src/main/TutorCompare.scala b/modules/tutor/src/main/TutorCompare.scala index 49a256a576e5..815204d21a65 100644 --- a/modules/tutor/src/main/TutorCompare.scala +++ b/modules/tutor/src/main/TutorCompare.scala @@ -1,6 +1,7 @@ package lila.tutor import scalalib.HeapSort.topN + import lila.insight.{ InsightDimension, InsightPosition } case class TutorCompare[D, V]( diff --git a/modules/tutor/src/main/TutorConversion.scala b/modules/tutor/src/main/TutorConversion.scala index aaf754e07f05..713e9572b2ce 100644 --- a/modules/tutor/src/main/TutorConversion.scala +++ b/modules/tutor/src/main/TutorConversion.scala @@ -3,7 +3,6 @@ package lila.tutor import lila.analyse.WinPercent import lila.db.dsl.* import lila.insight.* -import lila.insight.BSONHandlers.given import lila.insight.InsightEntry.BSONFields as F import lila.rating.BSONHandlers.perfTypeIdHandler import lila.rating.PerfType diff --git a/modules/tutor/src/main/TutorFishnet.scala b/modules/tutor/src/main/TutorFishnet.scala index c355bee78391..cb5558b1e7aa 100644 --- a/modules/tutor/src/main/TutorFishnet.scala +++ b/modules/tutor/src/main/TutorFishnet.scala @@ -2,7 +2,7 @@ package lila.tutor import com.softwaremill.tagging.* -import lila.core.fishnet.{ FishnetRequest, AnalysisAwaiter } +import lila.core.fishnet.{ AnalysisAwaiter, FishnetRequest } import lila.game.GameRepo import lila.insight.InsightPerfStats import lila.memo.SettingStore diff --git a/modules/tutor/src/main/TutorGlicko.scala b/modules/tutor/src/main/TutorGlicko.scala index 83e68745a220..e99047c74e7c 100644 --- a/modules/tutor/src/main/TutorGlicko.scala +++ b/modules/tutor/src/main/TutorGlicko.scala @@ -1,7 +1,7 @@ package lila.tutor -import lila.rating.{ Glicko, glicko2 } import lila.rating.PerfExt.toRating +import lila.rating.{ Glicko, glicko2 } object TutorGlicko: diff --git a/modules/tutor/src/main/TutorNumber.scala b/modules/tutor/src/main/TutorNumber.scala index b38e3a5b343e..48653dbdaf41 100644 --- a/modules/tutor/src/main/TutorNumber.scala +++ b/modules/tutor/src/main/TutorNumber.scala @@ -1,9 +1,9 @@ package lila.tutor import alleycats.Zero +import scalalib.Iso import lila.analyse.AccuracyPercent -import scalalib.Iso import lila.insight.ClockPercent trait TutorNumber[V]: diff --git a/modules/tutor/src/main/TutorOpening.scala b/modules/tutor/src/main/TutorOpening.scala index 576bb4522b2b..4ccfcd513e44 100644 --- a/modules/tutor/src/main/TutorOpening.scala +++ b/modules/tutor/src/main/TutorOpening.scala @@ -4,7 +4,6 @@ import chess.{ ByColor, Color } import lila.analyse.AccuracyPercent import lila.common.LilaOpeningFamily - import lila.insight.{ Filter, InsightApi, InsightDimension, InsightMetric, Phase, Question } case class TutorColorOpenings(families: List[TutorOpeningFamily]): diff --git a/modules/tutor/src/main/TutorQueue.scala b/modules/tutor/src/main/TutorQueue.scala index 05eb36d71ee0..d8c380335f45 100644 --- a/modules/tutor/src/main/TutorQueue.scala +++ b/modules/tutor/src/main/TutorQueue.scala @@ -6,7 +6,6 @@ import reactivemongo.api.* import reactivemongo.api.bson.* import lila.db.dsl.{ *, given } - import lila.memo.{ CacheApi, SettingStore } final private class TutorQueue( diff --git a/modules/tutor/src/main/TutorResourcefulness.scala b/modules/tutor/src/main/TutorResourcefulness.scala index 3bd9f912005c..e593f998d2b8 100644 --- a/modules/tutor/src/main/TutorResourcefulness.scala +++ b/modules/tutor/src/main/TutorResourcefulness.scala @@ -3,7 +3,6 @@ package lila.tutor import lila.analyse.WinPercent import lila.db.dsl.* import lila.insight.* -import lila.insight.BSONHandlers.given import lila.insight.InsightEntry.BSONFields as F import lila.rating.BSONHandlers.perfTypeIdHandler import lila.rating.PerfType diff --git a/modules/tutor/src/main/model.scala b/modules/tutor/src/main/model.scala index c6b408cb0a33..4325d800d3aa 100644 --- a/modules/tutor/src/main/model.scala +++ b/modules/tutor/src/main/model.scala @@ -3,11 +3,10 @@ package lila.tutor import alleycats.Zero import lila.analyse.AccuracyPercent +import lila.core.data.Percent import lila.insight.{ ClockPercent, InsightMetric, InsightPerfStats } import lila.rating.PerfType -import lila.core.data.Percent - case class ValueCount[V](value: V, count: Int): def map[B](f: V => B) = copy(value = f(value)) def reliableEnough = count >= 50 diff --git a/modules/tutor/src/main/package.scala b/modules/tutor/src/main/package.scala index eaaee1667d36..60124d7b0a19 100644 --- a/modules/tutor/src/main/package.scala +++ b/modules/tutor/src/main/package.scala @@ -1,7 +1,7 @@ package lila.tutor -import lila.insight.ClockPercent import lila.core.perf.UserWithPerfs +import lila.insight.ClockPercent export lila.core.lilaism.Lilaism.{ *, given } export lila.common.extensions.* diff --git a/modules/tutor/src/main/ui/PerfUi.scala b/modules/tutor/src/main/ui/PerfUi.scala index b169d618786a..0853e2b34a94 100644 --- a/modules/tutor/src/main/ui/PerfUi.scala +++ b/modules/tutor/src/main/ui/PerfUi.scala @@ -1,12 +1,9 @@ package lila.tutor package ui - -import chess.format.pgn.PgnStr - +import lila.insight.{ InsightPosition, Phase } import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.perf.UserWithPerfs -import lila.insight.{ Phase, InsightPosition } final class PerfUi(helpers: Helpers, bits: TutorBits): import helpers.{ *, given } diff --git a/modules/tutor/src/main/ui/TutorBits.scala b/modules/tutor/src/main/ui/TutorBits.scala index 9656a8658e47..5252402c3c65 100644 --- a/modules/tutor/src/main/ui/TutorBits.scala +++ b/modules/tutor/src/main/ui/TutorBits.scala @@ -2,6 +2,7 @@ package lila.tutor package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } final class TutorBits(helpers: Helpers)( diff --git a/modules/tutor/src/main/ui/TutorHome.scala b/modules/tutor/src/main/ui/TutorHome.scala index f6cb12e929d5..dfe38ea62190 100644 --- a/modules/tutor/src/main/ui/TutorHome.scala +++ b/modules/tutor/src/main/ui/TutorHome.scala @@ -3,9 +3,10 @@ package ui import chess.format.pgn.PgnStr +import lila.core.perf.UserWithPerfs import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.perf.UserWithPerfs final class TutorHome(helpers: Helpers, bits: TutorBits, perfUi: PerfUi): import helpers.{ *, given } diff --git a/modules/tutor/src/main/ui/TutorOpening.scala b/modules/tutor/src/main/ui/TutorOpening.scala index 3c57d41c9145..f48e9c0c7f26 100644 --- a/modules/tutor/src/main/ui/TutorOpening.scala +++ b/modules/tutor/src/main/ui/TutorOpening.scala @@ -1,11 +1,9 @@ package lila.tutor package ui - -import chess.format.pgn.PgnStr - +import lila.insight.InsightPosition import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.insight.InsightPosition final class TutorOpening(helpers: Helpers, bits: TutorBits, perfUi: PerfUi): import helpers.{ *, given } diff --git a/modules/tutor/src/main/ui/compare.scala b/modules/tutor/src/main/ui/compare.scala index 657eb2562c5f..c72ea44c9756 100644 --- a/modules/tutor/src/main/ui/compare.scala +++ b/modules/tutor/src/main/ui/compare.scala @@ -1,13 +1,10 @@ package lila.tutor package ui - -import play.api.i18n.Lang - -import lila.ui.ScalatagsTemplate.* import lila.common.LilaOpeningFamily +import lila.core.i18n.Translate import lila.insight.{ InsightDimension, Phase } import lila.rating.PerfType -import lila.core.i18n.Translate +import lila.ui.ScalatagsTemplate.* object compare: diff --git a/modules/tutor/src/main/ui/concept.scala b/modules/tutor/src/main/ui/concept.scala index 0e5f31a4a5e1..28b6975cb7cc 100644 --- a/modules/tutor/src/main/ui/concept.scala +++ b/modules/tutor/src/main/ui/concept.scala @@ -1,8 +1,8 @@ package lila.tutor package ui -import lila.ui.ScalatagsTemplate.* import lila.insight.{ InsightMetric, Phase } +import lila.ui.ScalatagsTemplate.* sealed class TutorConcept(val name: String, val description: String, val unit: TutorUnit) diff --git a/modules/tutor/src/main/ui/grade.scala b/modules/tutor/src/main/ui/grade.scala index f93a4e2e7e16..454a9ea1baac 100644 --- a/modules/tutor/src/main/ui/grade.scala +++ b/modules/tutor/src/main/ui/grade.scala @@ -1,12 +1,10 @@ package lila.tutor package ui - -import play.api.i18n.Lang import scalatags.Text -import lila.ui.ScalatagsTemplate.{ *, given } -import lila.insight.InsightPosition import lila.core.i18n.Translate +import lila.insight.InsightPosition +import lila.ui.ScalatagsTemplate.{ *, given } object grade: diff --git a/modules/tv/src/main/ChannelSyncActor.scala b/modules/tv/src/main/ChannelSyncActor.scala index d4edfee2c7a4..05afc8718bed 100644 --- a/modules/tv/src/main/ChannelSyncActor.scala +++ b/modules/tv/src/main/ChannelSyncActor.scala @@ -1,6 +1,6 @@ package lila.tv -import chess.{ Ply, Color } +import chess.{ Color, Ply } import monocle.syntax.all.* import scalalib.actor.SyncActor diff --git a/modules/tv/src/main/Env.scala b/modules/tv/src/main/Env.scala index fbb692fe110d..04b6bf03af39 100644 --- a/modules/tv/src/main/Env.scala +++ b/modules/tv/src/main/Env.scala @@ -4,8 +4,6 @@ import akka.actor.{ ActorRef, ActorSystem, Props } import com.softwaremill.macwire.* import lila.tv.Tv.Channel -import play.api.libs.json.JsValue -import akka.stream.scaladsl.Source @Module final class Env( @@ -29,7 +27,6 @@ final class Env( def channelSource(channel: Channel, bc: Boolean): Option[Fu[TvBroadcast.SourceType]] = given timeout: akka.util.Timeout = akka.util.Timeout(1 second) import akka.pattern.ask - import lila.tv.TvBroadcast val ctag = summon[scala.reflect.ClassTag[TvBroadcast.SourceType]] channelBroadcasts .get(channel) diff --git a/modules/tv/src/main/Tv.scala b/modules/tv/src/main/Tv.scala index 441be8d88126..1117af5522da 100644 --- a/modules/tv/src/main/Tv.scala +++ b/modules/tv/src/main/Tv.scala @@ -1,7 +1,7 @@ package lila.tv -import scalalib.actor.SyncActor import chess.PlayerTitle +import scalalib.actor.SyncActor import lila.core.LightUser import lila.game.GameRepo diff --git a/modules/tv/src/main/TvBroadcast.scala b/modules/tv/src/main/TvBroadcast.scala index 42ee1f86e51d..2f92252200cd 100644 --- a/modules/tv/src/main/TvBroadcast.scala +++ b/modules/tv/src/main/TvBroadcast.scala @@ -5,13 +5,12 @@ import akka.stream.scaladsl.* import chess.format.Fen import play.api.libs.json.* -import lila.common.Json.given import lila.common.Bus +import lila.common.Json.given import lila.core.LightUser - -import lila.game.actorApi.MoveGameEvent import lila.core.game.TvSelect import lila.core.socket.makeMessage +import lila.game.actorApi.MoveGameEvent final private class TvBroadcast( lightUserSync: LightUser.GetterSync, diff --git a/modules/tv/src/main/TvSyncActor.scala b/modules/tv/src/main/TvSyncActor.scala index 6b87b8d9fbbf..eb99ddfb2b25 100644 --- a/modules/tv/src/main/TvSyncActor.scala +++ b/modules/tv/src/main/TvSyncActor.scala @@ -1,7 +1,7 @@ package lila.tv -import scalalib.actor.SyncActor import play.api.libs.json.Json +import scalalib.actor.SyncActor import lila.common.Bus import lila.common.Json.given diff --git a/modules/ublog/src/main/Env.scala b/modules/ublog/src/main/Env.scala index a6b331712b78..8df1f531afd1 100644 --- a/modules/ublog/src/main/Env.scala +++ b/modules/ublog/src/main/Env.scala @@ -3,8 +3,8 @@ package lila.ublog import com.github.blemale.scaffeine.AsyncLoadingCache import com.softwaremill.macwire.* -import lila.core.config.* import lila.common.config.* +import lila.core.config.* import lila.db.dsl.Coll @Module diff --git a/modules/ublog/src/main/UblogApi.scala b/modules/ublog/src/main/UblogApi.scala index dfca05881fed..4ce857fb28a2 100644 --- a/modules/ublog/src/main/UblogApi.scala +++ b/modules/ublog/src/main/UblogApi.scala @@ -3,9 +3,9 @@ package lila.ublog import reactivemongo.akkastream.{ AkkaStreamCursor, cursorProducer } import reactivemongo.api.* +import lila.core.shutup.{ PublicSource, ShutupApi } +import lila.core.timeline as tl import lila.db.dsl.{ *, given } -import lila.core.shutup.{ ShutupApi, PublicSource } -import lila.core.{ timeline as tl } import lila.memo.PicfitApi final class UblogApi( diff --git a/modules/ublog/src/main/UblogBlog.scala b/modules/ublog/src/main/UblogBlog.scala index 36266b72db09..38a1a06529b3 100644 --- a/modules/ublog/src/main/UblogBlog.scala +++ b/modules/ublog/src/main/UblogBlog.scala @@ -1,8 +1,7 @@ package lila.ublog -import lila.core.perm.Granter - import lila.core.perf.UserWithPerfs +import lila.core.perm.Granter case class UblogBlog( _id: UblogBlog.Id, diff --git a/modules/ublog/src/main/UblogForm.scala b/modules/ublog/src/main/UblogForm.scala index c57bac3d48b6..4c56f015e577 100644 --- a/modules/ublog/src/main/UblogForm.scala +++ b/modules/ublog/src/main/UblogForm.scala @@ -4,10 +4,8 @@ import play.api.data.* import play.api.data.Forms.* import lila.common.Form.{ cleanNonEmptyText, into, given } -import lila.core.i18n.{ Language, LangList, defaultLanguage } - -import lila.core.captcha.CaptchaApi -import lila.core.captcha.WithCaptcha +import lila.core.captcha.{ CaptchaApi, WithCaptcha } +import lila.core.i18n.{ LangList, Language, defaultLanguage } final class UblogForm(val captcher: CaptchaApi, langList: LangList): diff --git a/modules/ublog/src/main/UblogMarkup.scala b/modules/ublog/src/main/UblogMarkup.scala index 2aa51ac2724d..f5012ab85db9 100644 --- a/modules/ublog/src/main/UblogMarkup.scala +++ b/modules/ublog/src/main/UblogMarkup.scala @@ -1,10 +1,9 @@ package lila.ublog import lila.common.{ Bus, Markdown, MarkdownRender, MarkdownToastUi } -import lila.core.misc.lpv.AllPgnsFromText -import lila.memo.CacheApi import lila.core.config -import lila.core.misc.lpv.LpvEmbed +import lila.core.misc.lpv.{ AllPgnsFromText, LpvEmbed } +import lila.memo.CacheApi final class UblogMarkup( baseUrl: config.BaseUrl, diff --git a/modules/ublog/src/main/UblogPaginator.scala b/modules/ublog/src/main/UblogPaginator.scala index e5a046bf7912..4499df4d4cb5 100644 --- a/modules/ublog/src/main/UblogPaginator.scala +++ b/modules/ublog/src/main/UblogPaginator.scala @@ -2,11 +2,11 @@ package lila.ublog import reactivemongo.api.* import reactivemongo.api.bson.BSONNull - import scalalib.paginator.{ AdapterLike, Paginator } + +import lila.core.i18n.Language import lila.db.dsl.{ *, given } import lila.db.paginator.Adapter -import lila.core.i18n.Language final class UblogPaginator( colls: UblogColls, diff --git a/modules/ublog/src/main/UblogPost.scala b/modules/ublog/src/main/UblogPost.scala index d996b583f670..1565ad99231c 100644 --- a/modules/ublog/src/main/UblogPost.scala +++ b/modules/ublog/src/main/UblogPost.scala @@ -2,9 +2,8 @@ package lila.ublog import reactivemongo.api.bson.Macros.Annotations.Key -import lila.core.i18n.Language import lila.core.data.OpaqueInstant -import lila.memo.PicfitUrl +import lila.core.i18n.Language import lila.core.id.ImageId case class UblogPost( diff --git a/modules/ublog/src/main/UblogRank.scala b/modules/ublog/src/main/UblogRank.scala index 39bb760c6a40..a6eb35dde914 100644 --- a/modules/ublog/src/main/UblogRank.scala +++ b/modules/ublog/src/main/UblogRank.scala @@ -3,11 +3,10 @@ import reactivemongo.akkastream.cursorProducer import reactivemongo.api.* import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } -import lila.core.timeline.{ Propagate, UblogPostLike } import lila.core.i18n.Language - import lila.core.perf.UserWithPerfs +import lila.core.timeline.{ Propagate, UblogPostLike } +import lila.db.dsl.{ *, given } object UblogRank: diff --git a/modules/ublog/src/main/ui/UblogFormUi.scala b/modules/ublog/src/main/ui/UblogFormUi.scala index bd99c2d14c69..268fb84a6bf9 100644 --- a/modules/ublog/src/main/ui/UblogFormUi.scala +++ b/modules/ublog/src/main/ui/UblogFormUi.scala @@ -1,11 +1,13 @@ package lila.ublog package ui -import lila.ui.* -import ScalatagsTemplate.{ *, given } import play.api.data.Form + import lila.core.captcha.Captcha import lila.core.id.CmsPageKey +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class UblogFormUi(helpers: Helpers, ui: UblogUi)( renderCaptcha: (Form[?], Option[Captcha]) => Context ?=> Frag diff --git a/modules/ublog/src/main/ui/UblogPostUi.scala b/modules/ublog/src/main/ui/UblogPostUi.scala index 68b36490de41..bb8593becd64 100644 --- a/modules/ublog/src/main/ui/UblogPostUi.scala +++ b/modules/ublog/src/main/ui/UblogPostUi.scala @@ -2,8 +2,8 @@ package lila.ublog package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.i18n.Language final class UblogPostUi(helpers: Helpers, ui: UblogUi)( ublogRank: UblogRank, diff --git a/modules/ublog/src/main/ui/UblogUi.scala b/modules/ublog/src/main/ui/UblogUi.scala index 3e1d4e50ed58..51aec0d72040 100644 --- a/modules/ublog/src/main/ui/UblogUi.scala +++ b/modules/ublog/src/main/ui/UblogUi.scala @@ -3,9 +3,10 @@ package ui import scalalib.paginator.Paginator +import lila.core.i18n.Language import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.i18n.Language final class UblogUi(helpers: Helpers, atomUi: AtomUi)(picfitUrl: lila.core.misc.PicfitUrl): import helpers.{ *, given } diff --git a/modules/ui/src/main/Context.scala b/modules/ui/src/main/Context.scala index b54e2f1bba13..d26d1cb64753 100644 --- a/modules/ui/src/main/Context.scala +++ b/modules/ui/src/main/Context.scala @@ -1,13 +1,13 @@ package lila.ui -import play.api.mvc.RequestHeader import play.api.i18n.Lang +import play.api.mvc.RequestHeader import lila.core.i18n.{ Language, Translate, defaultLanguage } import lila.core.net.IpAddress +import lila.core.notify.UnreadCount import lila.core.pref.Pref import lila.core.user.KidMode -import lila.core.notify.UnreadCount /* Data available in every HTTP request */ trait Context: diff --git a/modules/ui/src/main/helper/AssetHelper.scala b/modules/ui/src/main/helper/AssetHelper.scala index e1c3109b8dea..132d67c01ff5 100644 --- a/modules/ui/src/main/helper/AssetHelper.scala +++ b/modules/ui/src/main/helper/AssetHelper.scala @@ -2,9 +2,9 @@ package lila.ui import play.api.libs.json.* -import lila.ui.ScalatagsTemplate.* import lila.core.config.AssetBaseUrl import lila.core.data.SafeJsonStr +import lila.ui.ScalatagsTemplate.* trait AssetHelper: diff --git a/modules/ui/src/main/helper/ChessHelper.scala b/modules/ui/src/main/helper/ChessHelper.scala index a9fd302e8077..e7088429ba34 100644 --- a/modules/ui/src/main/helper/ChessHelper.scala +++ b/modules/ui/src/main/helper/ChessHelper.scala @@ -1,11 +1,12 @@ package lila.ui -import chess.{ Board, Color, Square } import chess.format.{ Fen, Uci } +import chess.{ Board, Color, Square } +import lila.core.pref.Pref import lila.ui.* + import ScalatagsTemplate.* -import lila.core.pref.Pref object ChessHelper: diff --git a/modules/ui/src/main/helper/DateHelper.scala b/modules/ui/src/main/helper/DateHelper.scala index 95a88b14235b..f2dbbf3aa6b8 100644 --- a/modules/ui/src/main/helper/DateHelper.scala +++ b/modules/ui/src/main/helper/DateHelper.scala @@ -6,8 +6,8 @@ import java.time.format.{ DateTimeFormatter, FormatStyle } import java.time.{ Duration, LocalDate } import java.util.concurrent.ConcurrentHashMap -import lila.ui.ScalatagsTemplate.* import lila.core.i18n.Translate +import lila.ui.ScalatagsTemplate.* trait DateHelper: self: StringHelper => diff --git a/modules/ui/src/main/helper/Form3.scala b/modules/ui/src/main/helper/Form3.scala index 3b418ddfb678..a68032409b09 100644 --- a/modules/ui/src/main/helper/Form3.scala +++ b/modules/ui/src/main/helper/Form3.scala @@ -1,11 +1,12 @@ package lila.ui import play.api.data.* -import lila.ui.ScalatagsTemplate.{ *, given } -import lila.core.user.FlairApi -import lila.core.i18n.{ I18nKey as trans, Translate } import scalatags.Text.TypedTag +import lila.core.i18n.{ I18nKey as trans, Translate } +import lila.core.user.FlairApi +import lila.ui.ScalatagsTemplate.{ *, given } + final class Form3(formHelper: FormHelper & I18nHelper, flairApi: FlairApi): import formHelper.{ transKey, given } diff --git a/modules/ui/src/main/helper/GameHelper.scala b/modules/ui/src/main/helper/GameHelper.scala index 62effe5e2566..090515fabfb0 100644 --- a/modules/ui/src/main/helper/GameHelper.scala +++ b/modules/ui/src/main/helper/GameHelper.scala @@ -2,10 +2,10 @@ package lila.ui import chess.{ Clock, Color, Mode, Outcome } -import lila.ui.ScalatagsTemplate.{ *, given } import lila.core.LightUser -import lila.core.game.{ Namer, Game, Player, LightPlayer } import lila.core.config.BaseUrl +import lila.core.game.{ Game, LightPlayer, Namer, Player } +import lila.ui.ScalatagsTemplate.{ *, given } trait GameHelper: self: I18nHelper & StringHelper & AssetHelper & UserHelper => diff --git a/modules/ui/src/main/helper/HtmlHelper.scala b/modules/ui/src/main/helper/HtmlHelper.scala index 0dd55671cc90..b414a7c22a3b 100644 --- a/modules/ui/src/main/helper/HtmlHelper.scala +++ b/modules/ui/src/main/helper/HtmlHelper.scala @@ -2,8 +2,8 @@ package lila.ui import scalatags.text.Builder -import lila.ui.ScalatagsTemplate.{ *, given } import lila.core.config.NetDomain +import lila.ui.ScalatagsTemplate.{ *, given } object HtmlHelper: diff --git a/modules/ui/src/main/helper/I18nHelper.scala b/modules/ui/src/main/helper/I18nHelper.scala index ce2461ac4848..c357474c4512 100644 --- a/modules/ui/src/main/helper/I18nHelper.scala +++ b/modules/ui/src/main/helper/I18nHelper.scala @@ -3,8 +3,8 @@ package lila.ui import play.api.i18n.Lang import play.api.libs.json.JsObject +import lila.core.i18n.{ I18nKey, JsDump, LangList, Translator, fixJavaLanguage } import lila.ui.ScalatagsTemplate.* -import lila.core.i18n.{ LangList, I18nKey, fixJavaLanguage, JsDump, Translator } trait I18nHelper: diff --git a/modules/ui/src/main/helper/NumberHelper.scala b/modules/ui/src/main/helper/NumberHelper.scala index be60538816fe..61466bae83ac 100644 --- a/modules/ui/src/main/helper/NumberHelper.scala +++ b/modules/ui/src/main/helper/NumberHelper.scala @@ -2,6 +2,7 @@ package lila.ui import java.text.NumberFormat import java.util.concurrent.ConcurrentHashMap + import lila.core.i18n.Translate object NumberHelper: diff --git a/modules/ui/src/main/helper/TeamHelper.scala b/modules/ui/src/main/helper/TeamHelper.scala index 0f1bc49be759..b3927bc0aaba 100644 --- a/modules/ui/src/main/helper/TeamHelper.scala +++ b/modules/ui/src/main/helper/TeamHelper.scala @@ -1,8 +1,8 @@ package lila.ui -import lila.ui.ScalatagsTemplate.{ *, given } -import lila.core.team.LightTeam import lila.core.id.ForumCategId +import lila.core.team.LightTeam +import lila.ui.ScalatagsTemplate.{ *, given } trait TeamHelper: self: AssetHelper => diff --git a/modules/ui/src/main/helper/UserHelper.scala b/modules/ui/src/main/helper/UserHelper.scala index ef6b9d378f1a..e34e64c32e18 100644 --- a/modules/ui/src/main/helper/UserHelper.scala +++ b/modules/ui/src/main/helper/UserHelper.scala @@ -2,10 +2,10 @@ package lila.ui import chess.PlayerTitle -import lila.ui.ScalatagsTemplate.{ *, given } -import lila.core.perf.{ UserWithPerfs, KeyedPerf, UserPerfs } import lila.core.LightUser +import lila.core.perf.{ KeyedPerf, UserPerfs, UserWithPerfs } import lila.core.socket.IsOnline +import lila.ui.ScalatagsTemplate.{ *, given } trait UserHelper: self: I18nHelper & NumberHelper & AssetHelper => diff --git a/modules/ui/src/main/package.scala b/modules/ui/src/main/package.scala index a1a8cd22e0d4..3025a4957031 100644 --- a/modules/ui/src/main/package.scala +++ b/modules/ui/src/main/package.scala @@ -3,9 +3,9 @@ package lila.ui import play.api.libs.json.JsValue import scalatags.Text.all.Frag +import lila.core.data.SafeJsonStr import lila.core.i18n.I18nKey import lila.core.perf.{ KeyedPerf, UserPerfs } -import lila.core.data.SafeJsonStr export lila.core.lilaism.Lilaism.{ *, given } diff --git a/modules/ui/src/main/router/LilaRouter.scala b/modules/ui/src/main/router/LilaRouter.scala index dc788430447e..fabe2ae3a300 100644 --- a/modules/ui/src/main/router/LilaRouter.scala +++ b/modules/ui/src/main/router/LilaRouter.scala @@ -1,11 +1,11 @@ package lila.ui +import chess.format.Uci import play.api.mvc.{ PathBindable, QueryStringBindable } import scalalib.newtypes.SameRuntime import lila.core.id.* -import chess.format.Uci -import lila.core.study.{ Order as StudyOrder } +import lila.core.study.Order as StudyOrder object LilaRouter: diff --git a/modules/ui/src/main/scalatags.scala b/modules/ui/src/main/scalatags.scala index 74dd0feed560..96e2df1bb969 100644 --- a/modules/ui/src/main/scalatags.scala +++ b/modules/ui/src/main/scalatags.scala @@ -1,13 +1,13 @@ package lila.ui -import cats.Monoid import alleycats.Zero +import cats.Monoid import chess.PlayerTitle +import io.mola.galimatias.URL import scalalib.Render import scalatags.Text.all.* import scalatags.Text.{ Aggregate, Cap, GenericAttr } import scalatags.text.Builder -import io.mola.galimatias.URL // collection of lila attrs trait ScalatagsAttrs: diff --git a/modules/ui/src/main/ui/AtomUi.scala b/modules/ui/src/main/ui/AtomUi.scala index a8ae510fbb60..6beff61e1178 100644 --- a/modules/ui/src/main/ui/AtomUi.scala +++ b/modules/ui/src/main/ui/AtomUi.scala @@ -2,9 +2,10 @@ package lila.ui import java.time.LocalDate -import ScalatagsTemplate.{ *, given } import lila.core.config.BaseUrl +import ScalatagsTemplate.{ *, given } + final class AtomUi(netBaseUrl: BaseUrl): def feed[A]( diff --git a/modules/ui/src/main/ui/bits.scala b/modules/ui/src/main/ui/bits.scala index 57e51fbf4d4b..d69a61db223b 100644 --- a/modules/ui/src/main/ui/bits.scala +++ b/modules/ui/src/main/ui/bits.scala @@ -1,10 +1,12 @@ package lila.ui -import ScalatagsTemplate.{ *, given } import chess.format.Fen + import lila.core.i18n.Translate import lila.core.security.HcaptchaForm +import ScalatagsTemplate.{ *, given } + object bits: val engineFullName = "Stockfish 16.1" diff --git a/modules/user/src/main/BSONHandlers.scala b/modules/user/src/main/BSONHandlers.scala index a6397fc06c62..6582f94d7162 100644 --- a/modules/user/src/main/BSONHandlers.scala +++ b/modules/user/src/main/BSONHandlers.scala @@ -2,8 +2,8 @@ package lila.user import reactivemongo.api.bson.* -import lila.core.user.{ UserEnabled, Profile, Plan, TotpSecret, PlayTime, UserMarks, Count } import lila.core.security.HashedPassword +import lila.core.user.{ Count, Plan, PlayTime, Profile, TotpSecret, UserEnabled, UserMarks } import lila.db.BSON import lila.db.dsl.{ *, given } diff --git a/modules/user/src/main/Cached.scala b/modules/user/src/main/Cached.scala index 378f7669a0d5..8329cca4377e 100644 --- a/modules/user/src/main/Cached.scala +++ b/modules/user/src/main/Cached.scala @@ -2,14 +2,12 @@ package lila.user import reactivemongo.api.bson.* -import lila.core.LightUser -import lila.db.dsl.{ *, given } -import lila.memo.CacheApi.* -import lila.rating.{ Perf, PerfType, UserPerfs } +import lila.core.perf.{ PerfId, UserWithPerfs } import lila.core.user.LightPerf -import lila.core.perf.PerfId import lila.core.userId.UserSearch -import lila.core.perf.UserWithPerfs +import lila.db.dsl.* +import lila.memo.CacheApi.* +import lila.rating.{ PerfType, UserPerfs } final class Cached( userRepo: UserRepo, diff --git a/modules/user/src/main/Env.scala b/modules/user/src/main/Env.scala index dd35604e9708..b29fab8cf888 100644 --- a/modules/user/src/main/Env.scala +++ b/modules/user/src/main/Env.scala @@ -4,7 +4,6 @@ import com.softwaremill.macwire.* import com.softwaremill.tagging.* import lila.core.config.* -import lila.core.perf import lila.core.userId @Module diff --git a/modules/user/src/main/JsonView.scala b/modules/user/src/main/JsonView.scala index bb2a10d8fc22..b81e9b30a221 100644 --- a/modules/user/src/main/JsonView.scala +++ b/modules/user/src/main/JsonView.scala @@ -4,13 +4,9 @@ import play.api.libs.json.* import lila.common.Json.{ writeAs, given } import lila.core.LightUser -import lila.core.perf.{ Perf, UserPerfs } - -import lila.core.user.{ Profile, PlayTime, LightPerf } -import lila.rating.PerfType -import lila.core.perf.{ KeyedPerf, UserWithPerfs } +import lila.core.perf.{ KeyedPerf, Perf, PuzPerf, UserPerfs, UserWithPerfs } +import lila.core.user.{ LightPerf, PlayTime, Profile } import lila.rating.UserPerfsExt.perfsList -import lila.core.perf.PuzPerf final class JsonView(isOnline: lila.core.socket.IsOnline) extends lila.core.user.JsonView: diff --git a/modules/user/src/main/Profile.scala b/modules/user/src/main/Profile.scala index db945490d1ba..710156d5621d 100644 --- a/modules/user/src/main/Profile.scala +++ b/modules/user/src/main/Profile.scala @@ -1,8 +1,5 @@ package lila.user - -import reactivemongo.api.bson.Macros.Annotations.Key -import lila.core.user.Profile -import lila.core.user.Flag +import lila.core.user.{ Flag, Profile } object Profile: diff --git a/modules/user/src/main/RankingApi.scala b/modules/user/src/main/RankingApi.scala index 60e039daae5d..b3d6c1795199 100644 --- a/modules/user/src/main/RankingApi.scala +++ b/modules/user/src/main/RankingApi.scala @@ -4,14 +4,13 @@ import reactivemongo.api.bson.* import scala.util.Success +import lila.core.perf.{ PerfId, UserPerfs } +import lila.core.user.LightPerf import lila.db.AsyncCollFailingSilently import lila.db.dsl.{ *, given } import lila.memo.CacheApi.* -import lila.rating.{ Glicko, Perf, UserPerfs } -import lila.core.user.LightPerf -import lila.core.perf.{ PerfId, UserPerfs } -import lila.rating.PerfType import lila.rating.GlickoExt.rankable +import lila.rating.PerfType final class RankingApi( c: AsyncCollFailingSilently, diff --git a/modules/user/src/main/TotpSecret.scala b/modules/user/src/main/TotpSecret.scala index b98eb88eeb89..d6307c937b4e 100644 --- a/modules/user/src/main/TotpSecret.scala +++ b/modules/user/src/main/TotpSecret.scala @@ -2,6 +2,7 @@ package lila.user import org.apache.commons.codec.binary.Base32 import scalalib.SecureRandom + import java.nio.ByteBuffer import javax.crypto.Mac import javax.crypto.spec.SecretKeySpec diff --git a/modules/user/src/main/TrophyApi.scala b/modules/user/src/main/TrophyApi.scala index dd1039e6a5e7..5d5242b43fea 100644 --- a/modules/user/src/main/TrophyApi.scala +++ b/modules/user/src/main/TrophyApi.scala @@ -1,7 +1,7 @@ package lila.user -import scalalib.ThreadLocalRandom import reactivemongo.api.bson.* +import scalalib.ThreadLocalRandom import lila.db.dsl.{ *, given } import lila.memo.* diff --git a/modules/user/src/main/User.scala b/modules/user/src/main/User.scala index aee4881ebc82..ff86e6c98ad5 100644 --- a/modules/user/src/main/User.scala +++ b/modules/user/src/main/User.scala @@ -1,27 +1,11 @@ package lila.user - -import chess.PlayerTitle import play.api.i18n.Lang + import java.time.Duration -import lila.core.email.NormalizedEmailAddress -import lila.core.LightUser -import lila.core.user.{ - LightPerf, - UserMark, - UserMarks, - UserEnabled, - Emails, - WithPerf, - Plan, - PlayTime, - Profile, - TotpSecret, - Count -} import lila.core.i18n.Language -import lila.rating.PerfType -import lila.core.perf.{ Perf, UserPerfs, UserWithPerfs } +import lila.core.perf.UserWithPerfs +import lila.core.user.{ Emails, PlayTime } object UserExt: extension (u: User) def userLanguage: Option[Language] = u.realLang.map(Language.apply) diff --git a/modules/user/src/main/UserApi.scala b/modules/user/src/main/UserApi.scala index 7e5d864f7e61..44b7b4af3750 100644 --- a/modules/user/src/main/UserApi.scala +++ b/modules/user/src/main/UserApi.scala @@ -4,18 +4,15 @@ import chess.{ ByColor, PlayerTitle } import reactivemongo.akkastream.cursorProducer import reactivemongo.api.bson.* -import lila.core.email.NormalizedEmailAddress import lila.core.LightUser -import lila.core.user.UserMark +import lila.core.email.NormalizedEmailAddress +import lila.core.lilaism.LilaInvalid +import lila.core.perf.{ UserPerfs, UserWithPerfs } +import lila.core.user.{ GameUsers, UserMark, WithEmails, WithPerf } import lila.db.dsl.{ *, given } import lila.memo.CacheApi -import lila.core.perf.{ UserPerfs, UserWithPerfs } -import lila.user.BSONHandlers.userHandler -import lila.core.lilaism.LilaInvalid -import lila.core.user.{ WithEmails, WithPerf } - import lila.rating.PerfType -import lila.core.user.GameUsers +import lila.user.BSONHandlers.userHandler final class UserApi(userRepo: UserRepo, perfsRepo: UserPerfsRepo, cacheApi: CacheApi)(using Executor, diff --git a/modules/user/src/main/UserAuth.scala b/modules/user/src/main/UserAuth.scala index 01c69b0afa56..463c8e3c4916 100644 --- a/modules/user/src/main/UserAuth.scala +++ b/modules/user/src/main/UserAuth.scala @@ -1,8 +1,8 @@ package lila.user +import lila.core.security.HashedPassword import lila.db.dsl.* import lila.user.BSONFields as F -import lila.core.security.HashedPassword case class AuthData( _id: UserId, diff --git a/modules/user/src/main/UserForm.scala b/modules/user/src/main/UserForm.scala index 9ae6a0864a3f..bc5f35d1329c 100644 --- a/modules/user/src/main/UserForm.scala +++ b/modules/user/src/main/UserForm.scala @@ -1,19 +1,14 @@ package lila.user - -import chess.PlayerTitle import play.api.data.* import play.api.data.Forms.* -import play.api.data.validation.Constraints import lila.common.Form.{ + cleanNoSymbolsAndNonEmptyText, + cleanNoSymbolsText, cleanNonEmptyText, cleanText, - cleanNoSymbolsText, - cleanNoSymbolsAndNonEmptyText, - playerTitle, into, - trim, - given + playerTitle } import lila.common.LameName import lila.core.user.Profile diff --git a/modules/user/src/main/UserPerfsRepo.scala b/modules/user/src/main/UserPerfsRepo.scala index b594cf5694d1..c402ea235843 100644 --- a/modules/user/src/main/UserPerfsRepo.scala +++ b/modules/user/src/main/UserPerfsRepo.scala @@ -3,12 +3,11 @@ package lila.user import reactivemongo.api.* import reactivemongo.api.bson.* -import lila.db.dsl.{ *, given } -import lila.rating.{ Glicko, Perf, UserPerfs } -import lila.rating.PerfType -import lila.core.user.WithPerf -import lila.core.rating.Glicko import lila.core.perf.{ UserPerfs, UserWithPerfs } +import lila.core.rating.Glicko +import lila.core.user.WithPerf +import lila.db.dsl.{ *, given } +import lila.rating.{ Glicko, Perf, PerfType, UserPerfs } final class UserPerfsRepo(c: Coll)(using Executor) extends lila.core.user.PerfsRepo(c): diff --git a/modules/user/src/main/UserRepo.scala b/modules/user/src/main/UserRepo.scala index bb7d29784886..e63db2ad1234 100644 --- a/modules/user/src/main/UserRepo.scala +++ b/modules/user/src/main/UserRepo.scala @@ -1,19 +1,19 @@ package lila.user -import com.roundeights.hasher.Implicits.* import chess.PlayerTitle -import scalalib.ThreadLocalRandom +import com.roundeights.hasher.Implicits.* import reactivemongo.api.* import reactivemongo.api.bson.* +import scalalib.ThreadLocalRandom +import scalalib.model.Days -import lila.core.net.ApiVersion -import lila.core.email.NormalizedEmailAddress import lila.core.LightUser -import lila.db.dsl.{ *, given } -import lila.core.userId.UserSearch -import lila.core.user.{ Profile, PlayTime, TotpSecret, Plan, UserMark } +import lila.core.email.NormalizedEmailAddress +import lila.core.net.ApiVersion import lila.core.security.HashedPassword -import scalalib.model.Days +import lila.core.user.{ Plan, PlayTime, Profile, TotpSecret, UserMark } +import lila.core.userId.UserSearch +import lila.db.dsl.{ *, given } final class UserRepo(c: Coll)(using Executor) extends lila.core.user.UserRepo(c): diff --git a/modules/user/src/main/ui/NoteUi.scala b/modules/user/src/main/ui/NoteUi.scala index 9274b5612de2..f356a242a7d9 100644 --- a/modules/user/src/main/ui/NoteUi.scala +++ b/modules/user/src/main/ui/NoteUi.scala @@ -1,10 +1,12 @@ package lila.user package ui +import scalalib.paginator.Paginator + +import lila.core.config.NetDomain import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.config.NetDomain -import scalalib.paginator.Paginator final class NoteUi(helpers: Helpers)(using NetDomain): import helpers.{ *, given } diff --git a/modules/user/src/main/ui/UserBits.scala b/modules/user/src/main/ui/UserBits.scala index 4a99f7a81d2b..94aa059e9c94 100644 --- a/modules/user/src/main/ui/UserBits.scala +++ b/modules/user/src/main/ui/UserBits.scala @@ -2,10 +2,11 @@ package lila.user package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } final class UserBits(helpers: Helpers): - import helpers.{ *, given } + import helpers.* def communityMenu(active: String)(using Translate) = lila.ui.bits.pageMenuSubnav( diff --git a/modules/user/src/main/ui/UserGamesDownload.scala b/modules/user/src/main/ui/UserGamesDownload.scala index 25ba7e57f7a5..4e91e136da5f 100644 --- a/modules/user/src/main/ui/UserGamesDownload.scala +++ b/modules/user/src/main/ui/UserGamesDownload.scala @@ -2,6 +2,7 @@ package lila.user package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } final class UserGamesDownload(helpers: Helpers): diff --git a/modules/user/src/main/ui/UserList.scala b/modules/user/src/main/ui/UserList.scala index d41956b76d33..75be295ce494 100644 --- a/modules/user/src/main/ui/UserList.scala +++ b/modules/user/src/main/ui/UserList.scala @@ -1,12 +1,12 @@ package lila.user package ui -import lila.ui.* -import ScalatagsTemplate.{ *, given } +import lila.core.perf.{ UserPerfs, UserWithPerfs } import lila.core.user.LightPerf -import lila.core.perf.UserWithPerfs -import lila.core.perf.UserPerfs import lila.rating.PerfType +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class UserList(helpers: Helpers, bits: UserBits): import helpers.{ *, given } diff --git a/modules/user/src/main/ui/UserShow.scala b/modules/user/src/main/ui/UserShow.scala index 2c32504e5648..4c3d031fbcf9 100644 --- a/modules/user/src/main/ui/UserShow.scala +++ b/modules/user/src/main/ui/UserShow.scala @@ -1,10 +1,11 @@ package lila.user package ui +import lila.core.perf.UserWithPerfs +import lila.core.user.Flag import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.perf.{ UserWithPerfs, KeyedPerf } -import lila.core.user.Flag final class UserShow(helpers: Helpers, bits: UserBits): import helpers.{ *, given } diff --git a/modules/user/src/main/ui/UserShowSide.scala b/modules/user/src/main/ui/UserShowSide.scala index 463854414fc9..cedb1ab20fb8 100644 --- a/modules/user/src/main/ui/UserShowSide.scala +++ b/modules/user/src/main/ui/UserShowSide.scala @@ -1,10 +1,11 @@ package lila.user package ui -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.perf.PuzPerf import lila.rating.UserWithPerfs.hasVariantRating +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class UserShowSide(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/video/src/main/VideoApi.scala b/modules/video/src/main/VideoApi.scala index 552dc43dcd25..2916c56ebcd4 100644 --- a/modules/video/src/main/VideoApi.scala +++ b/modules/video/src/main/VideoApi.scala @@ -1,8 +1,8 @@ package lila.video import reactivemongo.api.bson.* - import scalalib.paginator.* + import lila.db.dsl.{ *, given } import lila.db.paginator.Adapter import lila.memo.CacheApi.* diff --git a/modules/video/src/main/Youtube.scala b/modules/video/src/main/Youtube.scala index 8caaf28b2232..29f4beccd928 100644 --- a/modules/video/src/main/Youtube.scala +++ b/modules/video/src/main/Youtube.scala @@ -1,10 +1,9 @@ package lila.video -import scalalib.ThreadLocalRandom - import play.api.libs.json.* import play.api.libs.ws.JsonBodyReadables.* import play.api.libs.ws.StandaloneWSClient +import scalalib.ThreadLocalRandom import lila.core.config.* diff --git a/modules/video/src/main/ui/VideoUi.scala b/modules/video/src/main/ui/VideoUi.scala index 30dd41557ea5..f4c329f34a70 100644 --- a/modules/video/src/main/ui/VideoUi.scala +++ b/modules/video/src/main/ui/VideoUi.scala @@ -3,9 +3,10 @@ package ui import scalalib.paginator.Paginator +import lila.core.config.NetDomain import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.config.NetDomain final class VideoUi(helpers: Helpers)(using NetDomain): import helpers.{ *, given } diff --git a/modules/web/src/main/AnnounceApi.scala b/modules/web/src/main/AnnounceApi.scala index 22b1730cf6f0..2c2e45d309ce 100644 --- a/modules/web/src/main/AnnounceApi.scala +++ b/modules/web/src/main/AnnounceApi.scala @@ -1,8 +1,8 @@ package lila.web import play.api.libs.json.Json + import scala.util.Try -import play.api.libs.json.JsObject import lila.common.Bus import lila.core.socket.Announce diff --git a/modules/web/src/main/AssetManifest.scala b/modules/web/src/main/AssetManifest.scala index ac5690cec609..b03482d84e67 100644 --- a/modules/web/src/main/AssetManifest.scala +++ b/modules/web/src/main/AssetManifest.scala @@ -1,10 +1,11 @@ package lila.web import play.api.Environment -import play.api.libs.ws.StandaloneWSClient +import play.api.libs.json.{ JsObject, JsValue, Json } import play.api.libs.ws.JsonBodyReadables.* -import play.api.libs.json.{ JsObject, Json, JsValue, JsString } -import java.nio.file.{ Files, Path, Paths } +import play.api.libs.ws.StandaloneWSClient + +import java.nio.file.Files import lila.core.config.NetConfig diff --git a/modules/web/src/main/CtrlErrors.scala b/modules/web/src/main/CtrlErrors.scala index 61ba7aa923f0..2f6118be370c 100644 --- a/modules/web/src/main/CtrlErrors.scala +++ b/modules/web/src/main/CtrlErrors.scala @@ -1,12 +1,10 @@ package lila.web import play.api.data.Form -import play.api.i18n.Lang import play.api.libs.json.{ JsArray, JsObject, JsString, Json, Reads, Writes } import play.api.mvc.* -import lila.core.i18n.I18nKey -import lila.core.i18n.Translate +import lila.core.i18n.{ I18nKey, Translate } trait CtrlErrors extends ControllerHelpers: diff --git a/modules/web/src/main/CtrlExtensions.scala b/modules/web/src/main/CtrlExtensions.scala index 38c8596f0ac5..d506cc7bab10 100644 --- a/modules/web/src/main/CtrlExtensions.scala +++ b/modules/web/src/main/CtrlExtensions.scala @@ -1,13 +1,12 @@ package lila.web -import play.api.mvc.* import play.api.i18n.Lang -import scalatags.text.Frag +import play.api.mvc.* import lila.common.HTTPRequest +import lila.core.config.BaseUrl import lila.core.i18n.Translate import lila.core.perf.UserWithPerfs -import lila.core.config.BaseUrl import lila.ui.Context trait CtrlExtensions extends play.api.mvc.ControllerHelpers with ResponseHeaders: diff --git a/modules/web/src/main/Env.scala b/modules/web/src/main/Env.scala index 8d51f16b1da1..789852868bb0 100644 --- a/modules/web/src/main/Env.scala +++ b/modules/web/src/main/Env.scala @@ -1,7 +1,7 @@ package lila.web -import play.api.libs.ws.StandaloneWSClient import com.softwaremill.macwire.* +import play.api.libs.ws.StandaloneWSClient @Module final class Env( diff --git a/modules/web/src/main/GitHub.scala b/modules/web/src/main/GitHub.scala index aeb762f6a9f7..e25d2fb7cb1d 100644 --- a/modules/web/src/main/GitHub.scala +++ b/modules/web/src/main/GitHub.scala @@ -3,6 +3,7 @@ package lila.web import play.api.libs.json.* import play.api.libs.ws.JsonBodyReadables.* import play.api.libs.ws.StandaloneWSClient + import java.nio.charset.StandardCharsets import java.security.* import java.security.spec.* diff --git a/modules/web/src/main/InfluxEvent.scala b/modules/web/src/main/InfluxEvent.scala index ad82554462d0..47b8e07c2672 100644 --- a/modules/web/src/main/InfluxEvent.scala +++ b/modules/web/src/main/InfluxEvent.scala @@ -1,8 +1,8 @@ package lila.web -import scalalib.ThreadLocalRandom import play.api.libs.ws.DefaultBodyWritables.* import play.api.libs.ws.StandaloneWSClient +import scalalib.ThreadLocalRandom final class InfluxEvent( ws: StandaloneWSClient, diff --git a/modules/web/src/main/Limiters.scala b/modules/web/src/main/Limiters.scala index d928b4ba29cb..b5603b03fae2 100644 --- a/modules/web/src/main/Limiters.scala +++ b/modules/web/src/main/Limiters.scala @@ -1,9 +1,9 @@ package lila.web import lila.core.net.IpAddress -import lila.memo.RateLimit import lila.core.socket.Sri import lila.core.userId +import lila.memo.RateLimit final class Limiters(using Executor, lila.core.config.RateLimit): diff --git a/modules/web/src/main/PlayServer.scala b/modules/web/src/main/PlayServer.scala index df2f09fac6a9..66946237f78b 100644 --- a/modules/web/src/main/PlayServer.scala +++ b/modules/web/src/main/PlayServer.scala @@ -1,6 +1,4 @@ package lila.web - -import play.api.inject.DefaultApplicationLifecycle import play.api.{ Application, Configuration, Environment, Mode, Play } import play.core.server.{ NettyServer, @@ -10,6 +8,7 @@ import play.core.server.{ ServerProcess, ServerStartException } + import java.io.File object PlayServer: diff --git a/modules/web/src/main/ReferrerRedirect.scala b/modules/web/src/main/ReferrerRedirect.scala index a2604ea3a7a0..31da23fb61bb 100644 --- a/modules/web/src/main/ReferrerRedirect.scala +++ b/modules/web/src/main/ReferrerRedirect.scala @@ -1,6 +1,7 @@ package lila.web import io.mola.galimatias.URL + import scala.util.Try import lila.core.config.BaseUrl diff --git a/modules/web/src/main/ResponseBuilder.scala b/modules/web/src/main/ResponseBuilder.scala index 4723e3d33248..be50fb6e7007 100644 --- a/modules/web/src/main/ResponseBuilder.scala +++ b/modules/web/src/main/ResponseBuilder.scala @@ -1,14 +1,10 @@ package lila.web import akka.stream.scaladsl.Source -import alleycats.Zero import play.api.http.* import play.api.libs.json.* import play.api.mvc.* -import lila.common.HTTPRequest -import lila.core.net.ApiVersion - trait ResponseBuilder(using Executor) extends ControllerHelpers with ResponseWriter diff --git a/modules/web/src/main/ResponseWriter.scala b/modules/web/src/main/ResponseWriter.scala index d3eba343b2dc..c6ce63a936ae 100644 --- a/modules/web/src/main/ResponseWriter.scala +++ b/modules/web/src/main/ResponseWriter.scala @@ -3,7 +3,6 @@ package lila.web import chess.format.pgn.PgnStr import play.api.http.* import play.api.mvc.Codec -import scalatags.Text.Frag import lila.ui.{ Page, RenderedPage, Snippet } diff --git a/modules/web/src/main/StaticContent.scala b/modules/web/src/main/StaticContent.scala index ad9a7433dfeb..efb2c59c9bd9 100644 --- a/modules/web/src/main/StaticContent.scala +++ b/modules/web/src/main/StaticContent.scala @@ -3,8 +3,8 @@ package lila.web import play.api.libs.json.{ JsArray, Json } import play.api.mvc.RequestHeader -import lila.common.Json.given import lila.common.HTTPRequest +import lila.common.Json.given import lila.core.config.NetConfig object StaticContent: diff --git a/modules/web/src/main/TheftPrevention.scala b/modules/web/src/main/TheftPrevention.scala index af7895357277..5be9d7a22358 100644 --- a/modules/web/src/main/TheftPrevention.scala +++ b/modules/web/src/main/TheftPrevention.scala @@ -1,12 +1,11 @@ package lila.web -import play.api.mvc.* import play.api.libs.json.* +import play.api.mvc.* -import lila.common.Json.given +import lila.core.game.anonCookieName import lila.core.id.GamePlayerId import lila.ui.Context -import lila.core.game.anonCookieName trait TheftPrevention: self: lila.web.ResponseBuilder => diff --git a/modules/web/src/main/WebConfig.scala b/modules/web/src/main/WebConfig.scala index f6331355790f..c87ce3f7e480 100644 --- a/modules/web/src/main/WebConfig.scala +++ b/modules/web/src/main/WebConfig.scala @@ -2,9 +2,9 @@ package lila.web import play.api.mvc.RequestHeader -import lila.core.security.LilaCookie -import lila.core.config.* import lila.common.config.given +import lila.core.config.* +import lila.core.security.LilaCookie final class WebConfig( val apiToken: Secret, diff --git a/modules/web/src/main/helper/AssetFullHelper.scala b/modules/web/src/main/helper/AssetFullHelper.scala index 1abdb8104919..6b2395cc0367 100644 --- a/modules/web/src/main/helper/AssetFullHelper.scala +++ b/modules/web/src/main/helper/AssetFullHelper.scala @@ -1,12 +1,11 @@ package lila.web package ui -import play.api.libs.json.{ JsValue, Json, Writes } +import play.api.libs.json.JsValue -import lila.ui.ScalatagsTemplate.* -import lila.core.data.SafeJsonStr -import lila.web.ui.* import lila.core.config.NetConfig -import lila.ui.{ Nonce, Optionce, WithNonce, ContentSecurityPolicy, EsmList, Context } +import lila.core.data.SafeJsonStr +import lila.ui.ScalatagsTemplate.* +import lila.ui.{ ContentSecurityPolicy, Context, Optionce } trait AssetFullHelper: self: lila.ui.AssetHelper & lila.ui.I18nHelper => diff --git a/modules/web/src/main/ui/AuthUi.scala b/modules/web/src/main/ui/AuthUi.scala index 8f2da7dddea7..9466e5527329 100644 --- a/modules/web/src/main/ui/AuthUi.scala +++ b/modules/web/src/main/ui/AuthUi.scala @@ -1,13 +1,13 @@ package lila.web package ui -import play.api.data.{ Form, Field } -import play.api.libs.json.Json +import play.api.data.{ Field, Form } -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.common.HTTPRequest import lila.core.security.HcaptchaForm +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class AuthUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/web/src/main/ui/BoardEditorUi.scala b/modules/web/src/main/ui/BoardEditorUi.scala index 68a9bcbf2d52..182fe9164f9f 100644 --- a/modules/web/src/main/ui/BoardEditorUi.scala +++ b/modules/web/src/main/ui/BoardEditorUi.scala @@ -1,12 +1,13 @@ package lila.web package ui -import play.api.libs.json.* import chess.format.Fen +import play.api.libs.json.* -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.common.Json.given +import lila.ui.* + +import ScalatagsTemplate.* final class BoardEditorUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/web/src/main/ui/CaptchaUi.scala b/modules/web/src/main/ui/CaptchaUi.scala index 7ff8c2d2c496..31c1e4ee8ca7 100644 --- a/modules/web/src/main/ui/CaptchaUi.scala +++ b/modules/web/src/main/ui/CaptchaUi.scala @@ -1,13 +1,13 @@ package lila.web package ui +import play.api.data.{ Field, Form } import play.api.libs.json.Json -import play.api.data.{ Form, Field } -import scala.reflect.Selectable.reflectiveSelectable +import lila.core.captcha.Captcha import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.captcha.Captcha final class CaptchaUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/web/src/main/ui/DevUi.scala b/modules/web/src/main/ui/DevUi.scala index 52adc74724ce..36df31711ad4 100644 --- a/modules/web/src/main/ui/DevUi.scala +++ b/modules/web/src/main/ui/DevUi.scala @@ -4,10 +4,11 @@ package ui import play.api.data.Form import lila.ui.* + import ScalatagsTemplate.{ *, given } final class DevUi(helpers: Helpers)(modMenu: String => Context ?=> Frag): - import helpers.{ *, given } + import helpers.* def settings(settings: List[lila.memo.SettingStore[?]])(using Context) = val title = "Settings" diff --git a/modules/web/src/main/ui/DgtUi.scala b/modules/web/src/main/ui/DgtUi.scala index 8ebdca67c695..827d3d5c0833 100644 --- a/modules/web/src/main/ui/DgtUi.scala +++ b/modules/web/src/main/ui/DgtUi.scala @@ -2,8 +2,8 @@ package lila.web package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.common.Json.given final class DgtUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/web/src/main/ui/FaqUi.scala b/modules/web/src/main/ui/FaqUi.scala index 37daacdfe001..78a382185104 100644 --- a/modules/web/src/main/ui/FaqUi.scala +++ b/modules/web/src/main/ui/FaqUi.scala @@ -2,6 +2,7 @@ package lila.web package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } val fideHandbookUrl = "https://handbook.fide.com/chapter/E012023" diff --git a/modules/web/src/main/ui/LearnUi.scala b/modules/web/src/main/ui/LearnUi.scala index f05e1b496518..a06218dfb7a3 100644 --- a/modules/web/src/main/ui/LearnUi.scala +++ b/modules/web/src/main/ui/LearnUi.scala @@ -4,7 +4,8 @@ package ui import play.api.libs.json.Json import lila.ui.* -import ScalatagsTemplate.{ *, given } + +import ScalatagsTemplate.* final class LearnUi(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/web/src/main/ui/SiteMessage.scala b/modules/web/src/main/ui/SiteMessage.scala index 2a9525b565dd..1d57b3cc6679 100644 --- a/modules/web/src/main/ui/SiteMessage.scala +++ b/modules/web/src/main/ui/SiteMessage.scala @@ -2,6 +2,7 @@ package lila.web package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } final class SiteMessage(helpers: Helpers): diff --git a/modules/web/src/main/ui/SitePages.scala b/modules/web/src/main/ui/SitePages.scala index cf6eb4adbd1a..35cf307b2350 100644 --- a/modules/web/src/main/ui/SitePages.scala +++ b/modules/web/src/main/ui/SitePages.scala @@ -1,10 +1,10 @@ package lila.web package ui +import lila.core.id.{ CmsPageKey, ForumCategId } import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.id.ForumCategId -import lila.core.id.CmsPageKey final class SitePages(helpers: Helpers): import helpers.{ *, given } diff --git a/modules/web/src/main/ui/TopNav.scala b/modules/web/src/main/ui/TopNav.scala index 537b2a5366dc..d57de1b7e853 100644 --- a/modules/web/src/main/ui/TopNav.scala +++ b/modules/web/src/main/ui/TopNav.scala @@ -2,6 +2,7 @@ package lila.web package ui import lila.ui.* + import ScalatagsTemplate.{ *, given } final class TopNav(helpers: Helpers): diff --git a/modules/web/src/main/ui/bits.scala b/modules/web/src/main/ui/bits.scala index 4e3af786206f..f9a3d057df25 100644 --- a/modules/web/src/main/ui/bits.scala +++ b/modules/web/src/main/ui/bits.scala @@ -1,14 +1,8 @@ package lila.web package ui - -import chess.format.Fen -import play.api.i18n.Lang - import lila.ui.* + import ScalatagsTemplate.{ *, given } -import scalalib.paginator.Paginator -import lila.core.i18n.Translate -import lila.ui.ChessHelper.underscoreFen object bits: diff --git a/modules/web/src/main/ui/contact.scala b/modules/web/src/main/ui/contact.scala index 1d4621877ac3..a3c59f5e4e96 100644 --- a/modules/web/src/main/ui/contact.scala +++ b/modules/web/src/main/ui/contact.scala @@ -1,10 +1,11 @@ package lila.web package ui +import lila.core.i18n.{ I18nKey as trans, Translate } +import lila.core.id.ForumCategId import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.i18n.{ Translate, I18nKey as trans } -import lila.core.id.ForumCategId object contact: diff --git a/modules/web/src/main/ui/help.scala b/modules/web/src/main/ui/help.scala index 0f9529a4429e..9bca1f0772aa 100644 --- a/modules/web/src/main/ui/help.scala +++ b/modules/web/src/main/ui/help.scala @@ -1,9 +1,10 @@ package lila.web package ui +import lila.core.i18n.{ I18nKey as trans, Translate } import lila.ui.* + import ScalatagsTemplate.{ *, given } -import lila.core.i18n.{ Translate, I18nKey as trans } object help: diff --git a/modules/web/src/main/ui/layout.scala b/modules/web/src/main/ui/layout.scala index f4a94e68b267..af552a01ffa1 100644 --- a/modules/web/src/main/ui/layout.scala +++ b/modules/web/src/main/ui/layout.scala @@ -3,10 +3,11 @@ package ui import play.api.i18n.Lang -import lila.ui.* -import ScalatagsTemplate.{ *, given } import lila.core.i18n.Language import lila.core.report.ScoreThresholds +import lila.ui.* + +import ScalatagsTemplate.{ *, given } final class layout(helpers: Helpers, assetHelper: lila.web.ui.AssetFullHelper)( jsQuantity: Lang => String, diff --git a/modules/web/src/main/ui/mobile.scala b/modules/web/src/main/ui/mobile.scala index 57739c826aa6..d7546778d7b4 100644 --- a/modules/web/src/main/ui/mobile.scala +++ b/modules/web/src/main/ui/mobile.scala @@ -2,7 +2,8 @@ package lila.web package ui import lila.ui.* -import ScalatagsTemplate.{ *, given } + +import ScalatagsTemplate.* def mobile(helpers: Helpers)(renderedCmsPage: Frag)(using Context) = import helpers.{ *, given } diff --git a/modules/web/src/main/ui/openGraph.scala b/modules/web/src/main/ui/openGraph.scala index 34b421cf26ff..ea78e79b8615 100644 --- a/modules/web/src/main/ui/openGraph.scala +++ b/modules/web/src/main/ui/openGraph.scala @@ -2,7 +2,8 @@ package lila.web package ui import lila.ui.* -import ScalatagsTemplate.{ *, given } + +import ScalatagsTemplate.* def openGraph(graph: OpenGraph): Frag = og.frags(graph) ::: twitter.frags(graph) From bcf6ed633123f7afa877d213a1c146149371ded2 Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Mon, 15 Jul 2024 12:20:12 +0700 Subject: [PATCH 24/30] scalafixAll again --- modules/notify/src/main/Notification.scala | 1 - modules/notify/src/main/NotificationPref.scala | 1 - modules/notify/src/main/NotifyApi.scala | 2 +- modules/plan/src/main/PayPalClient.scala | 1 - modules/rating/src/main/UserPerfs.scala | 1 - modules/setup/src/main/ui/SetupUi.scala | 5 ++--- modules/ublog/src/main/Env.scala | 1 - 7 files changed, 3 insertions(+), 9 deletions(-) diff --git a/modules/notify/src/main/Notification.scala b/modules/notify/src/main/Notification.scala index fe332be16598..7684d7cec5e3 100644 --- a/modules/notify/src/main/Notification.scala +++ b/modules/notify/src/main/Notification.scala @@ -1,5 +1,4 @@ package lila.notify -import alleycats.Zero import scalalib.ThreadLocalRandom import reactivemongo.api.bson.Macros.Annotations.Key diff --git a/modules/notify/src/main/NotificationPref.scala b/modules/notify/src/main/NotificationPref.scala index c3c2992df59c..e36aca8cad1c 100644 --- a/modules/notify/src/main/NotificationPref.scala +++ b/modules/notify/src/main/NotificationPref.scala @@ -1,6 +1,5 @@ package lila.notify -import alleycats.Zero import reactivemongo.api.bson.* import lila.core.notify.{ Allows, PrefEvent } diff --git a/modules/notify/src/main/NotifyApi.scala b/modules/notify/src/main/NotifyApi.scala index 9316f8671464..f65c5617a4f1 100644 --- a/modules/notify/src/main/NotifyApi.scala +++ b/modules/notify/src/main/NotifyApi.scala @@ -7,7 +7,7 @@ import lila.common.Bus import scalalib.paginator.Paginator import lila.db.dsl.{ *, given } import lila.db.paginator.Adapter -import lila.core.socket.{ SendTo, SendTos } +import lila.core.socket.SendTos import lila.memo.CacheApi.* import lila.core.i18n.{ Translator, LangPicker } import lila.core.notify.{ NotificationPref as _, * } diff --git a/modules/plan/src/main/PayPalClient.scala b/modules/plan/src/main/PayPalClient.scala index 80589f1e0d32..97559a469384 100644 --- a/modules/plan/src/main/PayPalClient.scala +++ b/modules/plan/src/main/PayPalClient.scala @@ -25,7 +25,6 @@ final private class PayPalClient( import PayPalClient.* import JsonHandlers.payPal.given - import WebService.* given moneyWrites: OWrites[Money] = OWrites[Money] { money => Json.obj( diff --git a/modules/rating/src/main/UserPerfs.scala b/modules/rating/src/main/UserPerfs.scala index 3fe31e9a18d0..73fd126868f7 100644 --- a/modules/rating/src/main/UserPerfs.scala +++ b/modules/rating/src/main/UserPerfs.scala @@ -5,7 +5,6 @@ import scalalib.HeapSort.* import lila.core.perf.{ KeyedPerf, Perf, PuzPerf, UserPerfs } import lila.core.user.LightPerf -import lila.rating.GlickoExt.* import lila.rating.PerfExt.* object UserPerfsExt: diff --git a/modules/setup/src/main/ui/SetupUi.scala b/modules/setup/src/main/ui/SetupUi.scala index 0502d82cb3ac..61114afce414 100644 --- a/modules/setup/src/main/ui/SetupUi.scala +++ b/modules/setup/src/main/ui/SetupUi.scala @@ -155,13 +155,12 @@ final class SetupUi(helpers: Helpers): private def encodeId(v: Variant) = v.id.toString - private def variantTupleId = variantTuple(encodeId) + private def variantTuple(encode: Variant => String)(variant: Variant) = (encode(variant), variant.name, variant.title.some) - private def translatedVariantChoices(using Translate): List[SelectChoice] = - translatedVariantChoices(encodeId) + private def translatedVariantChoices(encode: Variant => String)(using Translate): List[SelectChoice] = List( diff --git a/modules/ublog/src/main/Env.scala b/modules/ublog/src/main/Env.scala index 8df1f531afd1..b34a984eb55a 100644 --- a/modules/ublog/src/main/Env.scala +++ b/modules/ublog/src/main/Env.scala @@ -3,7 +3,6 @@ package lila.ublog import com.github.blemale.scaffeine.AsyncLoadingCache import com.softwaremill.macwire.* -import lila.common.config.* import lila.core.config.* import lila.db.dsl.Coll From 443bdab0328f77cde3753b2f5fe56ea5fafa32c3 Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Mon, 15 Jul 2024 12:21:40 +0700 Subject: [PATCH 25/30] Revert "Add scalafix plugin" This reverts commit 54ca5e7f832fabfa813f8b432c427f8b1087e419. --- project/BuildSettings.scala | 7 +++---- project/plugins.sbt | 1 - 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/project/BuildSettings.scala b/project/BuildSettings.scala index d6e1a3cb90d1..5b72dec6c9f5 100644 --- a/project/BuildSettings.scala +++ b/project/BuildSettings.scala @@ -18,8 +18,7 @@ object BuildSettings { version := lilaVersion, Compile / doc / sources := Seq.empty, Compile / packageDoc / publishArtifact := false, - Compile / packageSrc / publishArtifact := false, - semanticdbEnabled := true // for scalafix + Compile / packageSrc / publishArtifact := false ) lazy val defaultLibs: Seq[ModuleID] = @@ -55,8 +54,8 @@ object BuildSettings { "-feature", "-language:postfixOps", "-language:implicitConversions", - "-release:21", - "-Wunused:all" + "-release:21" + // "-Wunused:all", ) val srcMain = Seq( diff --git a/project/plugins.sbt b/project/plugins.sbt index c2dcdd13c954..75e07618a341 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -5,4 +5,3 @@ resolvers += Resolver.url( addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.18-lila_1.25") // scala2 branch addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.5.2") addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.6.0") -addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.12.1") From 90a30bad58d19799e33d02365afc3a734d8a2432 Mon Sep 17 00:00:00 2001 From: Thanh Le Date: Mon, 15 Jul 2024 14:25:13 +0700 Subject: [PATCH 26/30] Remove unused variable --- modules/racer/src/main/Env.scala | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/racer/src/main/Env.scala b/modules/racer/src/main/Env.scala index c1273ce90a18..f56cf547abda 100644 --- a/modules/racer/src/main/Env.scala +++ b/modules/racer/src/main/Env.scala @@ -19,8 +19,6 @@ final class Env( db: lila.db.Db )(using Executor, Scheduler, play.api.Mode): - RacerColls(puzzle = puzzleColls.puzzle) - lazy val api = wire[RacerApi] lazy val lobby = wire[RacerLobby] @@ -28,5 +26,3 @@ final class Env( lazy val json = wire[RacerJson] wire[RacerSocket] // requires eager eval - -final private class RacerColls(val puzzle: AsyncColl) From 9ea07c64142975744979bda19ef435acc282a1cb Mon Sep 17 00:00:00 2001 From: Vincent Velociter Date: Mon, 15 Jul 2024 10:33:06 +0200 Subject: [PATCH 27/30] Open /bookmark to oAuth --- app/controllers/Game.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/Game.scala b/app/controllers/Game.scala index 3a94cb9665ee..a995c7e564ed 100644 --- a/app/controllers/Game.scala +++ b/app/controllers/Game.scala @@ -11,7 +11,7 @@ import lila.core.id.GameAnyId final class Game(env: Env, apiC: => Api) extends LilaController(env): - def bookmark(gameId: GameId) = Auth { _ ?=> me ?=> + def bookmark(gameId: GameId) = AuthOrScopedBody(_.Web.Mobile) { _ ?=> me ?=> env.bookmark.api.toggle(gameId, me).inject(NoContent) } From 08b092f257e62234ae970ec9f1bbdf8c9757868f Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Mon, 15 Jul 2024 11:32:47 +0200 Subject: [PATCH 28/30] New Crowdin updates (#15712) * New translations: swiss.xml (Persian) * New translations: puzzle.xml (Persian) * New translations: site.xml (Persian) * New translations: arena.xml (Lithuanian) * New translations: faq.xml (Lithuanian) * New translations: faq.xml (Lithuanian) * New translations: site.xml (Persian) * New translations: study.xml (Persian) * New translations: faq.xml (Persian) * New translations: contact.xml (Persian) * New translations: activity.xml (Persian) * New translations: preferences.xml (Persian) * New translations: patron.xml (French) * New translations: patron.xml (French) --- translation/dest/activity/fa-IR.xml | 4 +-- translation/dest/arena/lt-LT.xml | 4 +-- translation/dest/contact/fa-IR.xml | 2 +- translation/dest/faq/fa-IR.xml | 6 ++-- translation/dest/faq/lt-LT.xml | 33 ++++++++++++++++++ translation/dest/patron/fr-FR.xml | 4 +-- translation/dest/preferences/fa-IR.xml | 4 +-- translation/dest/puzzle/fa-IR.xml | 2 +- translation/dest/site/fa-IR.xml | 48 +++++++++++++------------- translation/dest/study/fa-IR.xml | 22 ++++++------ translation/dest/swiss/fa-IR.xml | 4 +-- 11 files changed, 83 insertions(+), 50 deletions(-) diff --git a/translation/dest/activity/fa-IR.xml b/translation/dest/activity/fa-IR.xml index d306badf16cd..33e4191dae4f 100644 --- a/translation/dest/activity/fa-IR.xml +++ b/translation/dest/activity/fa-IR.xml @@ -7,8 +7,8 @@ به عنوان %2$s برای %1$s ماه از lichess.org حمایت کرد - %1$s وضعیت را در %2$s تمرین کرد - %1$s پوزیسیون را در %2$s تمرین کرد + %1$s وضعیت تمرین‌شده در %2$s + %1$s وضعیت تمرین‌شده در %2$s %s معمای آموزشی را حل کرد diff --git a/translation/dest/arena/lt-LT.xml b/translation/dest/arena/lt-LT.xml index 4c5e49417a2e..82facad06ff0 100644 --- a/translation/dest/arena/lt-LT.xml +++ b/translation/dest/arena/lt-LT.xml @@ -54,8 +54,8 @@ Kai tik baigiate partiją, grįžkite į turnyro laukiamąjį: tuomet būsite su Nauja komandinė kova Kita pradžios data Jūsų laiko zonoje. Turi pirmenybę prieš \"Laikas iki turnyro pradžios\" nustatymą - Leisti \"įsiutį\" - Leisti žaidėjams gauti tašką perpus sumažinant laiką ant savo laikrodžio + Leisti \"įsiūtį\" + Leisti žaidėjams gauti papildomą tašką, perpus sumažinant savo laiką Leisti žaidėjams kalbėtis pokalbių kambaryje Arenos serijos Po dviejų pergalių kiti laimėjimai suteikia keturis taškus vietoje dviejų. diff --git a/translation/dest/contact/fa-IR.xml b/translation/dest/contact/fa-IR.xml index ac97fa3a5588..6625637fad4d 100644 --- a/translation/dest/contact/fa-IR.xml +++ b/translation/dest/contact/fa-IR.xml @@ -46,7 +46,7 @@ از قلعه‌روی، هنگامی که شاه از خانه‌ی زیرِضرب می‌گذرد، جلوگیری می‌شود. اطمینان یابید که قانون‌های قلعه‌روی را می‌فهمید برای تمرین قلعه‌روی در شطرنج، این بازی اندرکنشی را انجام دهید - اگر که شما بازی را وارد و بارگذاری کرده‌اید، یا از یک موقعیت میانی (وسطِ بازی در جریان و به جز وضعیت اولیه) شروع کرده‌اید، مطمئن شوید که قوانین قلعه‌زدن را درست تنظیم می‌کنید. + اگر بازی را درون‌بُرده‌اید یا آن را از وضعیتی آغازیده‌اید، مطمئن شوید که حق قلعه‌روی را به‌درستی تنظیم کرده‌اید. نبودِ مهره کافی برای مات کردن بازگشت به قوانین فیده برای شطرنج بخش 6.9، اگر کیش و مات با هر گونه سلسله حرکتهای قانونی ممکن باشد، آنگاه بازی مساوی نیست این ممکن است که با فقط یک اسب یا یک فیل، اگر که حریف بیشتر از شاه مهره‌ای روی صفحه داشته باشد، بازی را مات نمود. diff --git a/translation/dest/faq/fa-IR.xml b/translation/dest/faq/fa-IR.xml index 07c7323fd2e3..60dd9e9b8ca4 100644 --- a/translation/dest/faq/fa-IR.xml +++ b/translation/dest/faq/fa-IR.xml @@ -56,12 +56,12 @@ آموزش Lichess کیش و مات شدن %s در مقابل استاد بین‌المللی اریک روزن را تماشا کنید. تکرار سه گانه - اگر پوزیشنی سه بار اتفاق افتاد، بازیکنان میتوانن با استفاده از %1$s ادعای مساوی کنند. لیچس قوانین رسمی FIDE را که در مقاله %2$s توضیح داده شده اجرا میکند. + اگر یک وضعیت سه بار رخ دهد، بازیکنان می‌توانند با %1$s، ادعای تساوی کنند. Lichess قانون‌های رسمی فیده را که در ماده 9.2 %2$s آمده را، اجرا می‌کند. تکرار سه گانه ما حرکات را تکرار نکردیم. چرا بازی همچنان با تکرار مساوی می شد؟ تکرار سه گانه مربوط به %1$s تکراری است، نه حرکت. لزومی ندارد که تکرار به طور متوالی اتفاق بیفتد. - موقعیت‌ها - ما یک موقعیت را سه بار تکرار کردیم. چرا بازی مساوی نشد؟ + وضعیت‌ها + ما یک وضعیت را سه بار تکرار کردیم. چرا بازی مساوی نشد؟ پیکربندی نمایید حساب‌های کاربری چه عناوینی در Lichess وجود دارند؟ diff --git a/translation/dest/faq/lt-LT.xml b/translation/dest/faq/lt-LT.xml index 43269b734ee5..189340541db2 100644 --- a/translation/dest/faq/lt-LT.xml +++ b/translation/dest/faq/lt-LT.xml @@ -53,6 +53,7 @@ Kompiuterinė šachmatų analizė Lichess veikia Stockfish pagalba.
Retais atvejais sunku nuspręsti automatiškai (forsuotos linijos, tvirtovės). Pagal nutylėjimą mes visada esame žaidėjo, kuriam nepasibaigė laikas, pusėje. Verta pastebėti, kad matas su vienu žirgu ar rikiu galimas, jei priešininkas turi figūrą, kuri gali blokuoti karalių.
+ FIDE vadovas FIDE taisyklės %s Kodėl pėstininkas gali kirsti kitą pėstininką, nors jis jau prasilenkė? (kirtimas prasilenkiant, en passant) Tai yra legalus ėjimas vadinamas \"kirtimu prasilenkiant\". Šis Vikipedijos straipsnis suteikia %1$s. @@ -141,4 +142,36 @@ Geriausia galvoti apie reitingus kaip apie \"reliatyvius\" skaičius (priešinga Spustelėkite spynelės ikoną šalia lichess.org adreso savo naršyklės adreso laukelyje. Tada pasirinkite, ar norite gauti, ar blokuoti pranešimus iš Lichess. + Įgalinti automatinį garso paleidimą? + Daugelis naršyklių gali neleisti garsui groti ką tik įkeltame puslapyje, kad apsaugotų vartotojus. Įsivaizduokite, kad kiekviena svetainė galėtų jus iš karto bombarduoti garso skelbimais. + +Raudona nutildymo piktograma pasirodo, kai naršyklė neleidžia lichess.org leisti garso. Paprastai šis apribojimas panaikinamas, kai kur nors spustelėsite. Kai kuriose mobiliosiose naršyklėse elemento vilkimas jį palietus nelaikomas paspaudimu. Tokiu atveju turite paliesti lentą, kad kiekvieno žaidimo pradžioje būtų leidžiamas garsas. + +Rodome raudoną piktogramą, kad įspėtume jus, kai tai atsitiks. Dažnai galite aiškiai leisti lichess.org skleisti garsą. Čia pateikiamos instrukcijos, kaip tai padaryti naudojant naujausias kai kurių populiarių naršyklių versijas. + darbalaukis + 1. Eikite į lichess.org +2. Paspauskite Ctrl-i, jei naudojate „Linux“ ir/arba „Windows“, arba cmd-i, jei naudojate „MacOS“. +3. Spustelėkite skirtuką Leidimai +4. Leiskite garso ir vaizdo įrašus svetainėje lichess.org + 1. Eikite į lichess.org +2. Adreso juostoje spustelėkite užrakto piktogramą +3. Spustelėkite Svetainės nustatymai +4. Leiskite garsą + 1. Eikite į lichess.org +2. Meniu juostoje spustelėkite Safari +3. Spustelėkite „Lichess.org“ nustatymai ... +4. Leiskite visus automatinius paleidimus + 1. Spustelėkite tris taškus viršutiniame dešiniajame kampe +2. Spustelėkite Nustatymai +3. Spustelėkite Slapukai ir svetainės leidimai +4. Slinkite žemyn ir spustelėkite Media autoplay +5. Pridėkite lichess.org prie \"Leisti\" + Stabdote savo žaidimą? + savarankiška psichinės sveikatos būklė + Lichess vartotojo stiliai + Reguliariai gauname žinutes iš vartotojų, prašančių padėti, kad jie nežaistų per daug. + +Nors Lichess nedraudžia ir neblokuoja žaidėjų, išskyrus paslaugų teikimo sąlygų pažeidimus, rekomenduojame naudoti išorinius įrankius, kad apribotumėte pernelyg ilgai besitęsiantį žaidimą. Kai kurie bendri svetainių blokatorių pasiūlymai yra %1$s, %2$s ir %3$s. Jei norite ir toliau naudotis svetaine, bet nesusigundyti greita laiko kontrole, jus taip pat gali sudominti %4$s, čia yra %5$s. + +Kai kurie žaidėjai gali jausti, kad jų žaidimo elgesys virsta priklausomybe. Tiesą sakant, PSO lošimų sutrikimą priskiria %6$s, kurių pagrindiniai bruožai yra 1) pablogėjusi žaidimų kontrolė 2) žaidimams teikiamas prioritetas ir 3) lošimų išplitimas nepaisant neigiamų pasekmių. Jei manote, kad jūsų elgesys žaidžiant šachmatais atitinka šį modelį, raginame apie tai pasikalbėti su draugu ar šeimos nariu ir/arba profesionaliu specialistu.
diff --git a/translation/dest/patron/fr-FR.xml b/translation/dest/patron/fr-FR.xml index 46067a270199..2042e7eedcc2 100644 --- a/translation/dest/patron/fr-FR.xml +++ b/translation/dest/patron/fr-FR.xml @@ -8,7 +8,7 @@ %s est devenu un mécène de Lichess %1$s est un mécène de Lichess depuis %2$s mois - %1$s est un mécène de Lichess pour %2$s mois. + %1$s est un mécène de Lichess depuis %2$s mois Nouveaux mécènes Les échecs gratuits pour tous, pour toujours ! @@ -32,7 +32,7 @@ Connectez-vous pour faire un don. Nous sommes une petite équipe, ainsi votre soutien fait une énorme différence ! Les mécènes illustres qui rendent Lichess possible - Où va l\'argent? + Où va l\'argent ? Premièrement, des servers puissants. Puis nous payons un développeur à plein-temps: %s, le créateur de Lichess. Voir la liste détaillée des frais diff --git a/translation/dest/preferences/fa-IR.xml b/translation/dest/preferences/fa-IR.xml index fc212a860b92..7696af40cc06 100644 --- a/translation/dest/preferences/fa-IR.xml +++ b/translation/dest/preferences/fa-IR.xml @@ -18,7 +18,7 @@ نمایش نشان بازیکنان این گزینه همه درجه‌بندی‌ها در Lichess را پنهان می‌کند تا کمک کند روی شطرنج تمرکز کنید. بازی‌های رسمی همچنان بر درجه‌بندی‌تان تاثیر می‌گذارند، این گزینه فقط مربوط به دیدن/ندیدن درجه‌بندی‌هاست. نمایش دستگیره برای تغییر اندازه صفحه - فقط در آغاز بازی + فقط در وضعیت آغازین تنها در بازی ساعت شطرنج دهم ثانیه @@ -37,7 +37,7 @@ ارتقا خودکار به وزیر <ctrl> را در هنگام تبلیغ بزنید تا به طور موقت تبلیغات خودکار را غیرفعال کنید در زمان پیش حرکت - ادعای تساوی در تکرار سه گانه به طور خودکار + ادعای خودکار تساوی، در تکرار سه‌گانه وقتی زمان باقی مانده کمتر از سی ثانیه است تایید حرکت می‌تواند هنگام بازی با «گزینگان صفحه‌بازی» خاموش شود diff --git a/translation/dest/puzzle/fa-IR.xml b/translation/dest/puzzle/fa-IR.xml index 291ba571bb9d..47ba3ddfa6e8 100644 --- a/translation/dest/puzzle/fa-IR.xml +++ b/translation/dest/puzzle/fa-IR.xml @@ -1,7 +1,7 @@ معماها - معماهای دسته‌بندی شده + موضوع معماها توصیه شده مرحله‌ها موضوعات diff --git a/translation/dest/site/fa-IR.xml b/translation/dest/site/fa-IR.xml index fe0a0d1fc3e9..7364b3349a26 100644 --- a/translation/dest/site/fa-IR.xml +++ b/translation/dest/site/fa-IR.xml @@ -57,14 +57,14 @@ تحلیل رایانه‌ای موجود است تحلیل رایانه‌ای غیرفعال شد تحلیل بازی - عمق بررسی تا %s حرکت - استفاده از کارساز برای تحلیل - در حال بارگذاری پردازشگر شطرنج... + عمق %s + با استفاده از کارسازِ تحلیل + پردازشگر بارمی‌گذارد... در حال محاسبه حرکات... خطا در بارگذاری پردازشگر شطرنج تحلیل ابری - عمق و تعداد بیشتری از حرکتها را بررسی نمایید - تهدید را نمایش بدهید + بررسی عمیق‌تر + نمایش تهدید در مرورگر محلی کلید ارزیابی محلی افزایش عمق شاخه اصلی @@ -74,7 +74,7 @@ باز کردن شاخه‌ها نتیجه تحلیل را به عنوان یکی از تنوعهای بازی انتخاب نمایید کپی PGN این شاخه - انتقال بدهید + حرکت حرکت بازنده حرکت برنده مُهره ناکافی برای مات @@ -99,11 +99,11 @@ هیچ بازی یافت نشد عمق به حداکثر رسیده! ممکنه بازی‌های بیشتری با توجه به گزینگان ترجیح‌ها، وجود داشته باشد؟ - گشایش + گشایش‌ها جستجوگر گشایش‌ جستجوگر گشایش/آخربازی جستجوگر گشایش %s - اولین حرکت گشایش/آخربازی را برو + نخستین حرکت گشایش/آخربازی را برو قانون پنجاه حرکت از پیروزی جلوگیری کرد قانون ۵۰ حرکت از شکست جلوگیری کرد برد یا ۵٠ حرکت بعد از اشتباه قبلی @@ -359,7 +359,7 @@ مشاهده مسابقات برگشت به مسابقه شما نمی‌توانید در مسابقات سوییس تا قبل از حرکت ۳۰ام بازی را مساوی کنید. - واریانتی + موضوعی بیشتر از %s بازی رسمی بیشتر از %s بازی رسمی @@ -397,12 +397,12 @@ تایید ذخیره جدول رده‌بندی - از وضعیت فعلی نماگرفت بگیرید + نماگرفت از وضعیت فعلی بارگیری GIF بازی پوزیشن دلخواه(FEN) را در این قسمت وارد کنید متن PGN را در این قسمت وارد کنید یا یک فایل PGN بارگذاری کنید - شروع از پوزیشن + از وضعیت از اینجا ادامه دهید مطالعه بارگذاری بازی @@ -494,11 +494,11 @@ مُهره‌چینی مهره‌ها را بچینید گشایش‌های محبوب - آخربازی - پوزیشن ابتدایی شطرنج960: %s - موقعیت شروع + وضعیت‌های آخربازی + وضعیت آغازین شطرنج۹۶۰: %s + وضعیت آغازش پاک کردن صفحه - بارگذاری موقعیت + بارگذاری وضعیت خصوصی گزارش %s به ناظران میزان تکمیل رُخ‌نما: %s @@ -638,8 +638,8 @@ فقط دوستان فهرست قلعه‌روی - سفید O-O - سیاه O-O + O-O سفید + O-O سیاه %s وبنوشته در انجمن %s وبنوشته در انجمن @@ -703,7 +703,7 @@ کلید پیکان‌های شاخه اصلی چرخه پیشین/پسین شاخه اصلی کلید علائم حرکت‌نویسی - تغییر علائم حرکت‌نویسی + تغییر حرکت‌نویسی وضعیت پیکان های شاخه اصلی به شما امکان می‌دهد بدون استفاده از فهرست حرکت، پیمایش کنید. حرکت انتخاب شده را بازی کن مسابقه جدید @@ -805,7 +805,7 @@ اصول شطرنج مربی ها فایل PGN نامعتبر است - پوزیشن وارد شده نامعتبر است + وضعیت نامعتبر دلخواه گزارش هشدار: %1$s @@ -942,10 +942,10 @@ حداقل بازی های ریتد حداقل درجه‌بندی حداکثر درجه‌بندی هفتگی - برای شروع هر بازی از یک پوزیشن مشخص یک FEN معتبر را جایگذاری کنید. -این عمل فقط برای بازی های استاندارد امکان پذیر است، نه با واریانت ها. -شما می توانید %s را جهت ساخت یک پوزیشن FEN استفاده کنید و سپس اینجا جایگذاری کنید. -برای شروع بازی ها از وضعیت عادی ابتدایی خالی بگذارید. + برای آغاز هر بازی از یک وضعیت مشخص، یک FEN معتبر جای‌گذارید. +تنها برای شطرنج معیار کار می‌کند، نه با شطرنج‌گونه‌ها. +می‌توانید از %s برای آزانیدن وضعیت FEN استفاده کنید، سپس آن را اینجا جای‌گذارید. +برای آغاز بازی از وضعیت نخستین معمولی، خالی بگذارید. بازی هم‌زمان (سیمولتانه) را لغو نمایید رنگ مربوط به نمایش‌دهنده یا میزبان برای هر بازی زمان تقریبی شروع بازی @@ -970,7 +970,7 @@ نمایش این پنجره راهنما باز کردن مجدد حساب کاربری اگر حساب کاربری خود را مسدود کردید، اما بعد از آن نظرتان عوض شد، شما یک فرصت برای بازگرداندنِ حساب کاربری خود خواهید داشت. - پس از مسدودسازی حساب کاربری فقط یک بار امکان بازیابی آن خواهد بود. + تنها یک‌بار کار خواهد کرد. اگر برای بار دوم حساب کاربری خود را مسدود سازید، هیچ راهی برای بازیابی آن وجود نخواهد داشت. آدرس ایمیلی که به حساب کاربری مربوط شده است ما رایانامه‌ای شامل یک پیوند را به شما فرستاده‌ایم. diff --git a/translation/dest/study/fa-IR.xml b/translation/dest/study/fa-IR.xml index 79746db9829e..c3a429179c95 100644 --- a/translation/dest/study/fa-IR.xml +++ b/translation/dest/study/fa-IR.xml @@ -43,14 +43,14 @@ پسندیدن نمی‌پسندم برچسب جدید - نظر دادن به این پوزیسیون + دیدگاه‌نویسی برای این وضعیت قرار دادن توضیحات برای این حرکت حرکت‌نویسی به‌همراه علامت‌ها این بخش برای تحلیل، بسیار کوتاه است. تنها مشارکت‌گران این مطالعه، می‌توانند درخواست تحلیل رایانه‌ای دهند. یک تحلیل کامل رایانه‌ای کارساز-سو از شاخه اصلی بگیرید. مطمئن شوید که بخش کامل است. شما فقط یک بار می‌توانید درخواست تحلیل دهید. - تمام اعضای همگام شده در پوزیسیون یکسان باقی می‌مانند + همه‌ی عضوهای همگام در وضعیت یکسانی باقی می‌مانند تغییرات را با تماشاگران به اشتراک بگذارید و آنها را در سرور ذخیره کنید در حال انجام نوار ارزیابی @@ -68,8 +68,8 @@ وب‌نشانی مطالعه وب‌نشانی بخش جاری می‌توانید این را در انجمن یا وبنوشت Lichessتان برای جاسازی قرار دهید - از وضعیت نخستین بیاغازید - شروع از %s + در وضعیت نخستین بیاغازید + آغاز از %s در وبگاهتان قرار دهید درباره قرار دادن (در سایت) بیشتر بخوانید فقط مطالعه‌های همگانی می‌توانند جایگذاری شوند! @@ -95,11 +95,11 @@ درس تعاملی بخش %s خالی - از موقعیت ابتدایی شروع نمایید + از وضعیت نخستین بیاغازید ویرایشگر - از موقعیت دلخواه شروع نمایید + از وضعیت دلخواه بیاغازید بارگذاری بازی از وب‌نشانی‌ها - از FEN یک موقعیت را بارگیری کنید + بار کردن وضعیت از FEN باگذاری بازی با استفاده از فایل PGN خودکار @@ -122,7 +122,7 @@ اعضا همه فعال کردن همگام سازی - بله: همه را در پوزیسیونی یکسان نگه دار + بله: همه را در وضعیت یکسانی نگه دار خیر: به مردم اجازه جستجوی آزادانه بده یادداشت سنجاقیده به مطالعه آغاز @@ -140,8 +140,8 @@ حرکت مشکوک تک‌حرکت اکراهی - موقعیت برابر - موقعیت نامعلوم + وضعیت برابر + وضعیت ناروشن سفید کمی بهتر است مشکی کمی بهتر است سفید بهتر است @@ -165,6 +165,6 @@ مدیریت موضوع‌ها بازگشت دوباره بازی کنید - شما در این موقعیت چه حرکتی می کنید؟ + در این وضعیت چطور بازی می‌کنید؟ تبریک! شما این درس را کامل کردید. diff --git a/translation/dest/swiss/fa-IR.xml b/translation/dest/swiss/fa-IR.xml index 87df9c4f5efc..6dc157c02824 100644 --- a/translation/dest/swiss/fa-IR.xml +++ b/translation/dest/swiss/fa-IR.xml @@ -1,7 +1,7 @@ سؤيسى - مسابقات فرمت سوئیسی + مسابقات سوئیسی این دور را ببینید همه %s دور را ببینید @@ -83,7 +83,7 @@ بله،تا زمانی که بیش از نیمی از دورها اجرا شوند؛به عنوان مثال در یک مسابقه سوئیسی که در 11 دور برگزار می شود بازیکنان می توانند تا پیش از دور ششم حضور یابند و در مسابقه ای که در دوازده دور برگزار شود می توانند تا پیش از دور هفتم در مسابقه شرکت کنند. به بازیکنانی که دیرتر به مسابقه ملحق شوند فقط یک استراحت تعلق می گیرد حتی اگر چندین دور را از دست بدهند. آیا مسابقات سوئیسی می توانند جایگزین آرنا شوند? خیر. آنها ویژگی های مکمل هستند. - راند رابین چطور؟ + دوره‌ای چطور؟ دوست داریم که اضافه کنیم اما متاسفانه راند رابین بصورت آنلاین کار نمیکند. دلیل آن این است که هیچ راه عادلانه ای برای برخورد با افرادی که زودتر از موعد مسابقات را ترک می کنند، ندارد. ما نمی توانیم انتظار داشته باشیم که همه بازیکنان تمام بازی های خود را در یک رویداد آنلاین انجام دهند. این اتفاق نمی افتد، و در نتیجه در اکثر مسابقات راند رابین ناقص و ناعادلانه خواهند بود، که مخالف دلیل وجود آن است. نزدیک ترین چیزی که می توانید به راند رابین آنلاین داشته باشید، بازی در یک تورنمنت سوئیس با تعداد راندهای بسیار بالا است. سپس تمام جفت های ممکن قبل از پایان مسابقات انجام می شود. From 0ce11fe0142900b835979cfd481162b2895c45c3 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Mon, 15 Jul 2024 11:33:44 +0200 Subject: [PATCH 29/30] tweak geoip --- modules/security/src/main/GeoIP.scala | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/security/src/main/GeoIP.scala b/modules/security/src/main/GeoIP.scala index 062e7b7f9d91..1e8a9bbdecbd 100644 --- a/modules/security/src/main/GeoIP.scala +++ b/modules/security/src/main/GeoIP.scala @@ -73,7 +73,6 @@ object Location: def isSuspicious(loc: Location) = loc == unknown || - loc.region.has("Kirov Oblast") || - loc.region.has("Samsun") + loc.region.has("Kirov Oblast") case class WithProxy(location: Location, proxy: IsProxy) From 19bdf96c55a7102cef299ec66f8b5e439827e75a Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Mon, 15 Jul 2024 11:38:56 +0200 Subject: [PATCH 30/30] explicit game bookmark toggle --- app/controllers/Game.scala | 2 +- modules/bookmark/src/main/BookmarkApi.scala | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/app/controllers/Game.scala b/app/controllers/Game.scala index a995c7e564ed..ac6ba5771305 100644 --- a/app/controllers/Game.scala +++ b/app/controllers/Game.scala @@ -12,7 +12,7 @@ import lila.core.id.GameAnyId final class Game(env: Env, apiC: => Api) extends LilaController(env): def bookmark(gameId: GameId) = AuthOrScopedBody(_.Web.Mobile) { _ ?=> me ?=> - env.bookmark.api.toggle(gameId, me).inject(NoContent) + env.bookmark.api.toggle(gameId, me, getBoolOpt("v")).inject(NoContent) } def delete(gameId: GameId) = Auth { _ ?=> me ?=> diff --git a/modules/bookmark/src/main/BookmarkApi.scala b/modules/bookmark/src/main/BookmarkApi.scala index ab86395766f1..d3b172b81048 100644 --- a/modules/bookmark/src/main/BookmarkApi.scala +++ b/modules/bookmark/src/main/BookmarkApi.scala @@ -40,14 +40,18 @@ final class BookmarkApi( def remove(gameId: GameId, userId: UserId): Funit = coll.delete.one(selectId(gameId, userId)).void - def toggle(gameId: GameId, userId: UserId): Funit = + def toggle(gameId: GameId, userId: UserId, v: Option[Boolean]): Funit = exists(gameId, userId) .flatMap: e => - (if e then remove(gameId, userId) else add(gameId, userId, nowInstant)).inject(!e) - .flatMap: bookmarked => - val inc = if bookmarked then 1 else -1 - gameApi.incBookmarks(gameId, inc) >> - gameProxy.updateIfPresent(gameId)(g => g.copy(bookmarks = g.bookmarks + inc)) + val newValue = v.getOrElse(!e) + if e == newValue then funit + else + for + _ <- if newValue then add(gameId, userId, nowInstant) else remove(gameId, userId) + inc = if newValue then 1 else -1 + _ <- gameApi.incBookmarks(gameId, inc) + _ <- gameProxy.updateIfPresent(gameId)(g => g.copy(bookmarks = g.bookmarks + inc)) + yield () .recover: lila.db.ignoreDuplicateKey