Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: cpvalente/ontime
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v3.10.5
Choose a base ref
...
head repository: cpvalente/ontime
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: master
Choose a head ref

Commits on Jan 24, 2025

  1. Copy the full SHA
    d175c78 View commit details
  2. Copy the full SHA
    a8fe4c8 View commit details
  3. feat: automation service

    cpvalente committed Jan 24, 2025
    Copy the full SHA
    05e61e7 View commit details
  4. feat: automation UI

    merge with automation service
    cpvalente committed Jan 24, 2025
    Copy the full SHA
    8b84963 View commit details
  5. feat: send http

    cpvalente committed Jan 24, 2025
    Copy the full SHA
    ab4dd30 View commit details
  6. feat: send osc

    cpvalente committed Jan 24, 2025
    Copy the full SHA
    6c4d801 View commit details
  7. Copy the full SHA
    1f71d45 View commit details
  8. Copy the full SHA
    2cc434b View commit details
  9. feat: filtering logic

    cpvalente committed Jan 24, 2025
    Copy the full SHA
    bc93451 View commit details
  10. refactor: migrate to OSC min

    alex-Arc authored and cpvalente committed Jan 24, 2025
    Copy the full SHA
    f4f266d View commit details
  11. chore: rename feature elements

    rename automations > triggers
    rename blueprints > automations
    
    chore: add link to documentation
    cpvalente committed Jan 24, 2025
    Copy the full SHA
    efe5ac1 View commit details
  12. Copy the full SHA
    8ba65fa View commit details
  13. Copy the full SHA
    eb0e5e6 View commit details
  14. Copy the full SHA
    c333117 View commit details
  15. refactor: improve form ux

    cpvalente committed Jan 24, 2025
    Copy the full SHA
    39e0124 View commit details
  16. Copy the full SHA
    7f8dbbf View commit details
  17. Copy the full SHA
    a1d34c8 View commit details
  18. Copy the full SHA
    a12694b View commit details
  19. Copy the full SHA
    960f032 View commit details
  20. refactor: use type imports

    cpvalente committed Jan 24, 2025
    Copy the full SHA
    b4caec0 View commit details

Commits on Jan 25, 2025

  1. Copy the full SHA
    4503d1e View commit details
  2. Copy the full SHA
    bb1e907 View commit details

Commits on Jan 26, 2025

  1. More batch (#1468)

    * batch updates in client
    
    * rearange updating logic
    
    * utilety type
    
    * guard undefinde in affectsLoaded
    
    * fix: pause state not saved to restore point
    alex-Arc authored Jan 26, 2025
    Copy the full SHA
    d34280c View commit details
  2. feat: generate authenticated url (#1471)

    * refactor: extract info component
    
    * feat: generate authenticated url
    
    * refactor: add companion select
    
    * refactor: ensure behaviour across environments
    cpvalente authored Jan 26, 2025
    Copy the full SHA
    0f57689 View commit details
  3. Copy the full SHA
    5d5b48a View commit details

Commits on Jan 27, 2025

  1. Timeuntil in UI (#1461)

    * cherry pick EventBlockChip
    
    * pull data down throug components
    
    * add comment
    
    * cleanup css
    
    Co-authored-by: Carlos Valente <34649812+cpvalente@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Carlos Valente <34649812+cpvalente@users.noreply.github.com>
    alex-Arc and cpvalente authored Jan 27, 2025
    Copy the full SHA
    221ff7b View commit details
  2. refactor: fix roll next day

    cpvalente committed Jan 27, 2025
    Copy the full SHA
    fb1bbd6 View commit details

Commits on Jan 30, 2025

  1. Copy the full SHA
    f509655 View commit details

Commits on Jan 31, 2025

  1. fix: update time in block (#1474)

    * fix: update time in block
    
    ---------
    
    Co-authored-by: arc-alex <ac@omnivox.dk>
    cpvalente and alex-Arc authored Jan 31, 2025
    Copy the full SHA
    73ada99 View commit details

Commits on Feb 1, 2025

  1. Copy the full SHA
    0b8a694 View commit details
  2. Copy the full SHA
    bc12531 View commit details
  3. Copy the full SHA
    60354f8 View commit details
  4. chore: test is typescript

    cpvalente committed Feb 1, 2025
    Copy the full SHA
    430bfb3 View commit details
  5. Copy the full SHA
    f0e6231 View commit details
  6. Copy the full SHA
    d08787a View commit details
  7. Copy the full SHA
    c3d66f5 View commit details

Commits on Feb 4, 2025

  1. Copy the full SHA
    3d50b8c View commit details
  2. Copy the full SHA
    44b0cfd View commit details
  3. Copy the full SHA
    6be6e5f View commit details
  4. Copy the full SHA
    1715c19 View commit details
  5. Copy the full SHA
    38a3165 View commit details

Commits on Feb 6, 2025

  1. Copy the full SHA
    d26a3cd View commit details
  2. Copy the full SHA
    af17706 View commit details

Commits on Feb 10, 2025

  1. Copy the full SHA
    31799f8 View commit details
  2. Copy the full SHA
    bac11ad View commit details

Commits on Feb 12, 2025

  1. Catch xlsx error (#1487)

    * catch potential xlsx errors
    
    * clear worksheet errors when starting new connections
    alex-Arc authored Feb 12, 2025
    Copy the full SHA
    0b36608 View commit details
  2. bump version to 3.11.0

    cpvalente committed Feb 12, 2025
    Copy the full SHA
    fd9b944 View commit details
  3. refactor: reword error

    cpvalente committed Feb 12, 2025
    Copy the full SHA
    649f0af View commit details
  4. Revert "Timeuntil in UI (#1461)"

    This reverts commit 221ff7b.
    cpvalente committed Feb 12, 2025
    Copy the full SHA
    8ac5c0a View commit details

Commits on Feb 17, 2025

  1. Copy the full SHA
    3d40e31 View commit details
Showing 353 changed files with 10,102 additions and 4,771 deletions.
2 changes: 1 addition & 1 deletion apps/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@getontime/cli",
"version": "3.10.5",
"version": "3.14.1",
"author": "Carlos Valente",
"description": "Time keeping for live events",
"repository": "https://github.com/cpvalente/ontime",
5 changes: 3 additions & 2 deletions apps/client/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ontime-ui",
"version": "3.10.5",
"version": "3.14.1",
"private": true,
"type": "module",
"dependencies": {
@@ -15,6 +15,7 @@
"@mantine/hooks": "^7.13.3",
"@react-icons/all-files": "^4.1.0",
"@sentry/react": "^8.43.0",
"@table-nav/react": "^0.0.7",
"@tanstack/react-query": "^5.62.7",
"@tanstack/react-query-devtools": "^5.62.7",
"@tanstack/react-table": "^8.20.5",
@@ -31,7 +32,7 @@
"react-qr-code": "^2.0.12",
"react-router-dom": "^6.3.0",
"web-vitals": "^3.1.1",
"zustand": "^4.5.2"
"zustand": "^5.0.3"
},
"scripts": {
"addversion": "node -p \"'export const ONTIME_VERSION = ' + JSON.stringify(require('../../package.json').version) + ';'\" > src/ONTIME_VERSION.js",
17 changes: 13 additions & 4 deletions apps/client/src/AppRouter.tsx
Original file line number Diff line number Diff line change
@@ -27,9 +27,9 @@ const MinimalTimerView = React.lazy(() => import('./features/viewers/minimal-tim
const ClockView = React.lazy(() => import('./features/viewers/clock/Clock'));
const Countdown = React.lazy(() => import('./features/viewers/countdown/Countdown'));

const Backstage = React.lazy(() => import('./features/viewers/backstage/Backstage'));
const Backstage = React.lazy(() => import('./views/backstage/Backstage'));
const Timeline = React.lazy(() => import('./views/timeline/TimelinePage'));
const Public = React.lazy(() => import('./features/viewers/public/Public'));
const Public = React.lazy(() => import('./views/public/Public'));
const Lower = React.lazy(() => import('./features/viewers/lower-thirds/LowerThird'));
const StudioClock = React.lazy(() => import('./features/viewers/studio/StudioClock'));
const ProjectInfo = React.lazy(() => import('./views/project-info/ProjectInfo'));
@@ -44,6 +44,8 @@ const SPublic = withPreset(withData(Public));
const SLowerThird = withPreset(withData(Lower));
const SStudio = withPreset(withData(StudioClock));
const STimeline = withPreset(withData(Timeline));
const PCuesheet = withPreset(Cuesheet);
const POperator = withPreset(Operator);

const EditorFeatureWrapper = React.lazy(() => import('./features/EditorFeatureWrapper'));
const RundownPanel = React.lazy(() => import('./features/rundown/RundownExport'));
@@ -155,8 +157,15 @@ export default function AppRouter() {

{/*/!* Protected Routes *!/*/}
<Route path='/editor' element={<Editor />} />
<Route path='/cuesheet' element={<Cuesheet />} />
<Route path='/op' element={<Operator />} />
<Route path='/cuesheet' element={<PCuesheet />} />
<Route
path='/op'
element={
<ViewLoader>
<POperator />
</ViewLoader>
}
/>

{/*/!* Protected Routes - Elements *!/*/}
<Route
85 changes: 85 additions & 0 deletions apps/client/src/common/api/automation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import axios from 'axios';
import type {
Automation,
AutomationDTO,
AutomationOutput,
AutomationSettings,
Trigger,
TriggerDTO,
} from 'ontime-types';

import { apiEntryUrl } from './constants';

const automationsPath = `${apiEntryUrl}/automations`;

/**
* HTTP request to get the automations settings
*/
export async function getAutomationSettings(): Promise<AutomationSettings> {
const res = await axios.get(automationsPath);
return res.data;
}

/**
* HTTP request to edit the automations settings
*/
export async function editAutomationSettings(
automationSettings: Partial<AutomationSettings>,
): Promise<AutomationSettings> {
const res = await axios.post(automationsPath, automationSettings);
return res.data;
}

/**
* HTTP request to create a new automation trigger
*/
export async function addTrigger(trigger: TriggerDTO): Promise<Trigger> {
const res = await axios.post(`${automationsPath}/trigger`, trigger);
return res.data;
}

/**
* HTTP request to update an automation trigger
*/
export async function editTrigger(id: string, trigger: Trigger): Promise<Trigger> {
const res = await axios.put(`${automationsPath}/trigger/${id}`, trigger);
return res.data;
}

/**
* HTTP request to delete an automation trigger
*/
export function deleteTrigger(id: string): Promise<void> {
return axios.delete(`${automationsPath}/trigger/${id}`);
}

/**
* HTTP request to create a new automation
*/
export async function addAutomation(automation: AutomationDTO): Promise<Automation> {
const res = await axios.post(`${automationsPath}/automation`, automation);
return res.data;
}

/**
* HTTP request to update a automation
*/
export async function editAutomation(id: string, automation: Automation): Promise<Automation> {
const res = await axios.put(`${automationsPath}/automation/${id}`, automation);
return res.data;
}

/**
* HTTP request to delete a automation
*/
export function deleteAutomation(id: string): Promise<void> {
return axios.delete(`${automationsPath}/automation/${id}`);
}

/**
* HTTP request to test automation output
* The return is irrelevant as we care for the resolution of the promise
*/
export function testOutput(output: AutomationOutput): Promise<void> {
return axios.post(`${automationsPath}/test`, output);
}
4 changes: 2 additions & 2 deletions apps/client/src/common/api/constants.ts
Original file line number Diff line number Diff line change
@@ -4,9 +4,8 @@ import { serverURL } from '../../externals';
export const APP_INFO = ['appinfo'];
export const APP_SETTINGS = ['appSettings'];
export const APP_VERSION = ['appVersion'];
export const AUTOMATION = ['automation'];
export const CUSTOM_FIELDS = ['customFields'];
export const HTTP_SETTINGS = ['httpSettings'];
export const OSC_SETTINGS = ['oscSettings'];
export const PROJECT_DATA = ['project'];
export const PROJECT_LIST = ['projectList'];
export const RUNDOWN = ['rundown'];
@@ -15,6 +14,7 @@ export const SHEET_STATE = ['sheetState'];
export const URL_PRESETS = ['urlpresets'];
export const VIEW_SETTINGS = ['viewSettings'];
export const CLIENT_LIST = ['clientList'];
export const REPORT = ['report'];

// API URLs
export const apiEntryUrl = `${serverURL}/data`;
5 changes: 3 additions & 2 deletions apps/client/src/common/api/db.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import axios, { AxiosResponse } from 'axios';
import { DatabaseModel, MessageResponse, ProjectData, ProjectFileListResponse, QuickStartData } from 'ontime-types';

import { makeCSV, makeTable } from '../../views/cuesheet/cuesheet.utils';
import { makeTable } from '../../views/cuesheet/cuesheet.utils';
import { makeCSVFromArrayOfArrays } from '../utils/csv';

import { apiEntryUrl } from './constants';
import { createBlob, downloadBlob } from './utils';
@@ -42,7 +43,7 @@ export async function downloadCSV(fileName: string = 'rundown') {
const { project, rundown, customFields } = data;

const sheetData = makeTable(project, rundown, customFields);
const fileContent = makeCSV(sheetData);
const fileContent = makeCSVFromArrayOfArrays(sheetData);

const blob = createBlob(fileContent, 'text/csv;charset=utf-8;');
downloadBlob(blob, `${name}.csv`);
21 changes: 0 additions & 21 deletions apps/client/src/common/api/http.ts

This file was deleted.

21 changes: 0 additions & 21 deletions apps/client/src/common/api/osc.ts

This file was deleted.

26 changes: 26 additions & 0 deletions apps/client/src/common/api/report.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import axios from 'axios';
import { OntimeReport } from 'ontime-types';

import { ontimeQueryClient } from '../../common/queryClient';

import { apiEntryUrl, REPORT } from './constants';

export const reportUrl = `${apiEntryUrl}/report`;

/**
* HTTP request to fetch all reports
*/
export async function fetchReport(): Promise<OntimeReport> {
const res = await axios.get(`${reportUrl}/`);
return res.data;
}

export async function deleteReport(id: string) {
await axios.delete(`${reportUrl}/${id}`);
await ontimeQueryClient.invalidateQueries({ queryKey: REPORT });
}

export async function deleteAllReport() {
await axios.delete(`${reportUrl}/all`);
await ontimeQueryClient.invalidateQueries({ queryKey: REPORT });
}
13 changes: 13 additions & 0 deletions apps/client/src/common/api/session.ts
Original file line number Diff line number Diff line change
@@ -12,3 +12,16 @@ export async function getInfo(): Promise<GetInfo> {
const res = await axios.get(`${sessionPath}/info`);
return res.data;
}

/**
* HTTP request to get a pre-authenticated URL
*/
export async function generateUrl(
baseUrl: string,
path: string,
lock: boolean,
authenticate: boolean,
): Promise<string> {
const res = await axios.post(`${sessionPath}/url`, { baseUrl, path, lock, authenticate });
return res.data.url;
}
12 changes: 0 additions & 12 deletions apps/client/src/common/components/app-link/AppLink.module.scss

This file was deleted.

26 changes: 0 additions & 26 deletions apps/client/src/common/components/app-link/AppLink.tsx

This file was deleted.

26 changes: 26 additions & 0 deletions apps/client/src/common/components/buttons/IconButton.module.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
.subtle {
aspect-ratio: 1;
height: 2rem;
height: 2rem;
display: grid;
place-content: center;

background: $gray-1050;
color: $blue-400;
border: 1px solid transparent;
border-radius: 3px;

&:hover:not(:disabled):not(:active) {
background: $gray-1000;
color: $blue-500;
}

&:active {
background: $gray-1100;
border-color: $gray-1250;
}

&:disabled {
background: $gray-1050;
}
}
14 changes: 14 additions & 0 deletions apps/client/src/common/components/buttons/IconButton.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { ButtonHTMLAttributes } from 'react';

import { cx } from '../../utils/styleUtils';

import style from './IconButton.module.scss';

export default function IconButton(props: ButtonHTMLAttributes<HTMLButtonElement>) {
const { className, children, ...buttonProps } = props;
return (
<button className={cx([style.subtle, className])} {...buttonProps}>
{children}
</button>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
.textEntry {
grid-area: input;
display: flex;
align-items: center;
gap: 0.5rem;
color: $label-gray;
}

.inlineEntry {
display: grid;
grid-template-areas:
'label label'
'input btn';
grid-template-columns: 1fr auto;
column-gap: 0.5rem;
}

.redirect {
grid-area: btn;
}

.label {
color: $label-gray;
}
Loading