liquidsoap-prettier 1.8.2 → 1.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/.github/workflows/check-formatting.yml +32 -0
  2. package/README.md +31 -5
  3. package/package.json +1 -1
  4. package/src/cli.js +104 -9
  5. package/tests/liq/audio.liq +460 -0
  6. package/tests/liq/autocue.liq +1081 -0
  7. package/tests/liq/clock.liq +14 -0
  8. package/tests/liq/cron.liq +74 -0
  9. package/tests/liq/error.liq +48 -0
  10. package/tests/liq/extra/audio.liq +677 -0
  11. package/tests/liq/extra/audioscrobbler.liq +482 -0
  12. package/tests/liq/extra/deprecations.liq +976 -0
  13. package/tests/liq/extra/externals.liq +196 -0
  14. package/tests/liq/extra/fades.liq +260 -0
  15. package/tests/liq/extra/file.liq +66 -0
  16. package/tests/liq/extra/http.liq +160 -0
  17. package/tests/liq/extra/interactive.liq +917 -0
  18. package/tests/liq/extra/metadata.liq +75 -0
  19. package/tests/liq/extra/native.liq +201 -0
  20. package/tests/liq/extra/openai.liq +150 -0
  21. package/tests/liq/extra/server.liq +177 -0
  22. package/tests/liq/extra/source.liq +476 -0
  23. package/tests/liq/extra/spinitron.liq +272 -0
  24. package/tests/liq/extra/telnet.liq +266 -0
  25. package/tests/liq/extra/video.liq +59 -0
  26. package/tests/liq/extra/visualization.liq +68 -0
  27. package/tests/liq/fades.liq +941 -0
  28. package/tests/liq/ffmpeg.liq +605 -0
  29. package/tests/liq/file.liq +387 -0
  30. package/tests/liq/getter.liq +74 -0
  31. package/tests/liq/hls.liq +329 -0
  32. package/tests/liq/http.liq +1048 -0
  33. package/tests/liq/http_codes.liq +447 -0
  34. package/tests/liq/icecast.liq +58 -0
  35. package/tests/liq/io.liq +106 -0
  36. package/tests/liq/liquidsoap.liq +31 -0
  37. package/tests/liq/list.liq +440 -0
  38. package/tests/liq/log.liq +47 -0
  39. package/tests/liq/lufs.liq +295 -0
  40. package/tests/liq/math.liq +23 -0
  41. package/tests/liq/medialib.liq +752 -0
  42. package/tests/liq/metadata.liq +253 -0
  43. package/tests/liq/nfo.liq +258 -0
  44. package/tests/liq/null.liq +71 -0
  45. package/tests/liq/playlist.liq +1347 -0
  46. package/tests/liq/predicate.liq +106 -0
  47. package/tests/liq/process.liq +93 -0
  48. package/tests/liq/profiler.liq +5 -0
  49. package/tests/liq/protocols.liq +1139 -0
  50. package/tests/liq/ref.liq +28 -0
  51. package/tests/liq/replaygain.liq +135 -0
  52. package/tests/liq/request.liq +467 -0
  53. package/tests/liq/resolvers.liq +33 -0
  54. package/tests/liq/runtime.liq +70 -0
  55. package/tests/liq/server.liq +99 -0
  56. package/tests/liq/settings.liq +41 -0
  57. package/tests/liq/socket.liq +33 -0
  58. package/tests/liq/source.liq +362 -0
  59. package/tests/liq/sqlite.liq +161 -0
  60. package/tests/liq/stdlib.liq +172 -0
  61. package/tests/liq/string.liq +476 -0
  62. package/tests/liq/switches.liq +197 -0
  63. package/tests/liq/testing.liq +37 -0
  64. package/tests/liq/thread.liq +161 -0
  65. package/tests/liq/tracks.liq +100 -0
  66. package/tests/liq/utils.liq +81 -0
  67. package/tests/liq/video.liq +918 -0
@@ -0,0 +1,976 @@
1
+ # Deprecated APIs.
2
+
3
+ # Mark a function as deprecated.
4
+ # @flag deprecated
5
+ # @category Liquidsoap
6
+ # @param old Old function name.
7
+ # @param new New function name.
8
+ def deprecated(old, new) =
9
+ new =
10
+ if
11
+ new == ""
12
+ then
13
+ ""
14
+ else
15
+ " Please use \"#{new}\" instead."
16
+ end
17
+ log.severe(
18
+ label="lang.deprecated",
19
+ "WARNING: \"#{old}\" is deprecated and will be removed in future version.#{
20
+ new
21
+ }"
22
+ )
23
+ end
24
+
25
+ %ifdef input.external.rawaudio
26
+ # Deprecated: this function has been replaced by `input.external.rawaudio`.
27
+ # @flag deprecated
28
+ def replaces input.external(%argsof(input.external.rawaudio), cmd) =
29
+ deprecated("input.external", "input.external.rawaudio")
30
+ input.external.rawaudio(%argsof(input.external.rawaudio), cmd)
31
+ end
32
+ %endif
33
+
34
+ # Deprecated: this function has been replaced by `string.quote`.
35
+ # @flag deprecated
36
+ def quote(s) =
37
+ deprecated("quote", "string.quote")
38
+ string.quote(s)
39
+ end
40
+
41
+ let string.utf8 = ()
42
+
43
+ # Deprecated: this function has been replaced by `string.escape`.
44
+ # @flag deprecated
45
+ def string.utf8.escape(s) =
46
+ deprecated("string.utf8.escape", "string.escape")
47
+ string.escape(s)
48
+ end
49
+
50
+ # Deprecated: use mksafe and playlist instead.
51
+ # @flag deprecated
52
+ def playlist.safe(
53
+ ~id=null,
54
+ ~mime_type="",
55
+ ~mode="randomize",
56
+ ~on_track={()},
57
+ ~prefix="",
58
+ ~reload=0,
59
+ ~reload_mode="seconds",
60
+ uri
61
+ ) =
62
+ deprecated("playlist.safe", "")
63
+ ignore(on_track)
64
+ mksafe(
65
+ playlist(
66
+ id=id,
67
+ mime_type=mime_type,
68
+ mode=mode,
69
+ prefix=prefix,
70
+ reload=reload,
71
+ reload_mode=reload_mode,
72
+ uri
73
+ )
74
+ )
75
+ end
76
+
77
+ # Deprecated: this function has been replaced by `thread.run.recurrent`.
78
+ # @flag deprecated
79
+ def add_timeout(~fast=true, delay, f) =
80
+ deprecated("add_timeout", "thread.run.recurrent")
81
+ thread.run.recurrent(fast=fast, delay=delay, f)
82
+ end
83
+
84
+ # Deprecated: this function has been replaced by `thread.when`.
85
+ # @flag deprecated
86
+ def exec_at(~freq=1., ~pred, f) =
87
+ deprecated("exec_at", "thread.when")
88
+ thread.when(every=freq, pred, f)
89
+ end
90
+
91
+ # Deprecated: this function has been replaced by `file.which`.
92
+ # @flag deprecated
93
+ def which(f) =
94
+ deprecated("which", "file.which")
95
+ file.which(f) ?? ""
96
+ end
97
+
98
+ base64 = ()
99
+
100
+ # Deprecated: this function has been replaced by `string.base64.decode`.
101
+ # @flag deprecated
102
+ def base64.decode(s) =
103
+ deprecated("base64.decode", "string.base64.decode")
104
+ string.base64.decode(s)
105
+ end
106
+
107
+ # Deprecated: this function has been replaced by `string.base64.encode`.
108
+ # @flag deprecated
109
+ def base64.encode(s) =
110
+ deprecated("base64.encode", "string.base64.encode")
111
+ string.base64.encode(s)
112
+ end
113
+
114
+ # Deprecated: this function has been replaced with `playlist`, setting
115
+ # `reload_mode` argument to `"never"` and `loop` to `false`.
116
+ # @flag deprecated
117
+ def playlist.once(
118
+ ~id=null,
119
+ ~random=false,
120
+ ~reload_mode="",
121
+ ~prefetch=1,
122
+ ~filter=fun (_) -> true,
123
+ uri
124
+ ) =
125
+ deprecated("playlist.once", "playlist")
126
+ mode = if random then "randomize" else "normal" end
127
+ reload_mode = if reload_mode == "" then "never" else reload_mode end
128
+ playlist(
129
+ reload_mode=reload_mode,
130
+ loop=false,
131
+ id=id,
132
+ mode=mode,
133
+ prefetch=prefetch,
134
+ check_next=filter,
135
+ uri
136
+ )
137
+ end
138
+
139
+ # Deprecated: use metadata.map
140
+ # @flag deprecated
141
+ def map_metadata(%argsof(metadata.map), fn, s) =
142
+ deprecated("map_metadata", "metadata.map")
143
+ metadata.map(%argsof(metadata.map), fn, s)
144
+ end
145
+
146
+ # Deprecated: this function has been replaced by `metadata.map`.
147
+ # @flag deprecated
148
+ def rewrite_metadata(l, ~insert_missing=true, ~update=true, ~strip=false, s) =
149
+ deprecated("rewrite_metadata", "metadata.map")
150
+
151
+ def map(m) =
152
+ def apply(x) =
153
+ label = fst(x)
154
+ value = snd(x)
155
+ (label, value % m)
156
+ end
157
+
158
+ list.map(apply, l)
159
+ end
160
+
161
+ metadata.map(
162
+ map,
163
+ insert_missing=insert_missing,
164
+ update=update,
165
+ strip=strip,
166
+ s
167
+ )
168
+ end
169
+
170
+ # Deprecated: this function will be removed in a future release
171
+ # @flag deprecated
172
+ def id(~id=null, s) =
173
+ deprecated("id", "")
174
+ ignore(id)
175
+ s
176
+ end
177
+
178
+ # Deprecated: flow is no longer maintained
179
+ # Register a radio on Liquidsoap Flows.
180
+ # @category Liquidsoap
181
+ # @flag deprecated
182
+ # @param ~radio Name of the radio.
183
+ # @param ~website URL of the website of the radio.
184
+ # @param ~description Description of the radio.
185
+ # @param ~genre Genre of the radio (rock or rap or etc.).
186
+ # @param ~streams List of streams for the radio described by \
187
+ # a pair of strings consisting of the format of the stream \
188
+ # and the url of the stream. The format should be \
189
+ # of the form "ogg/128k" consisting of the codec and \
190
+ # the bitrate, separated by "/".
191
+ def register_flow(
192
+ ~server="",
193
+ ~user="default",
194
+ ~password="default",
195
+ ~email="",
196
+ ~radio,
197
+ ~website,
198
+ ~description,
199
+ ~genre,
200
+ ~streams,
201
+ s
202
+ ) =
203
+ deprecated("register_flow", "")
204
+
205
+ # If the server is "", we get the server from sf.net
206
+ server =
207
+ if
208
+ server == ""
209
+ then
210
+ let data = http.get("http://liquidsoap.info/flows_server")
211
+ if
212
+ data.status_code == 200
213
+ then
214
+ data
215
+ else
216
+ # If sf is down, we use the hardcoded server
217
+ "http://savonet.rastageeks.org/liqflows.py"
218
+ end
219
+ else
220
+ server
221
+ end
222
+
223
+ log(
224
+ level=4,
225
+ "Flows server: #{server}"
226
+ )
227
+
228
+ # Initial variables
229
+ ping_period = 600.
230
+
231
+ # Pinging period in seconds
232
+
233
+ # Fix default parameters
234
+ # and set request function.
235
+ base_params =
236
+ [
237
+ ("v", "0.0"),
238
+ ("user", user),
239
+ ("password", password),
240
+ ("email", email),
241
+ ("radio", radio)
242
+ ]
243
+
244
+ def request(~cmd, ~params) =
245
+ def log(~level, x) =
246
+ log(label=radio, level=level, x)
247
+ end
248
+
249
+ log(
250
+ level=4,
251
+ "Processing command #{cmd} with arguments:"
252
+ )
253
+
254
+ def log_arg(x) =
255
+ let (label, value) = x
256
+ log(
257
+ level=4,
258
+ " #{label}: #{value}"
259
+ )
260
+ end
261
+
262
+ list.iter(log_arg, params)
263
+ cmd = url.encode(cmd)
264
+ params = list.append(base_params, params)
265
+
266
+ def f(z) =
267
+ let (x, y) = z
268
+ y = url.encode(y)
269
+ "#{x}=#{y}"
270
+ end
271
+
272
+ params = string.concat(separator="&", list.map(f, params))
273
+ url = "#{server}?cmd=#{cmd}&#{params}"
274
+
275
+ # TODO: do something with errors!
276
+ answer = http.get(url)
277
+ log(
278
+ level=4,
279
+ "Response status: #{answer.http_version} #{answer.status_code} #{
280
+ answer.status_message
281
+ }"
282
+ )
283
+
284
+ log(
285
+ level=4,
286
+ "Response headers:"
287
+ )
288
+ list.iter(log_arg, answer.headers)
289
+ log(
290
+ level=4,
291
+ "Response content: #{answer}"
292
+ )
293
+ end
294
+
295
+ # Register radio
296
+ params =
297
+ [
298
+ ("radio_website", website),
299
+ ("radio_description", description),
300
+ ("radio_genre", genre)
301
+ ]
302
+
303
+ request(
304
+ cmd="add radio",
305
+ params=params
306
+ )
307
+
308
+ # Ping
309
+ def ping() =
310
+ ignore(
311
+ request(
312
+ cmd="ping radio",
313
+ params=[]
314
+ )
315
+ )
316
+ ping_period
317
+ end
318
+
319
+ thread.run.recurrent(fast=false, delay=ping_period, ping)
320
+
321
+ # Register streams
322
+ def register_stream(format_url) =
323
+ let (format, url) = format_url
324
+ params = [("stream_format", format), ("stream_url", url)]
325
+ request(
326
+ cmd="add stream",
327
+ params=params
328
+ )
329
+ end
330
+
331
+ request(
332
+ cmd="clear streams",
333
+ params=[]
334
+ )
335
+ list.iter(register_stream, streams)
336
+
337
+ # Metadata update
338
+ def metadata(m) =
339
+ artist = m["artist"]
340
+ title = m["title"]
341
+ params = [("m_title", title), ("m_artist", artist)]
342
+ request(cmd="metadata", params=params)
343
+ end
344
+
345
+ s.on_metadata(metadata)
346
+ end
347
+
348
+ # Deprecated: this function has been replaced by `source.fail`.
349
+ # @flag deprecated
350
+ def empty(~id=null) =
351
+ deprecated("empty", "source.fail")
352
+ source.fail(id=id)
353
+ end
354
+
355
+ # Deprecated: use `request.create` instead.
356
+ # @flag deprecated
357
+ def request.create.raw(%argsof(request.create), uri) =
358
+ deprecated("request.create.raw", "request.create")
359
+ request.create(%argsof(request.create), uri)
360
+ end
361
+
362
+ # Deprecated: use `file.remove` instead.
363
+ # @flag deprecated
364
+ def file.unlink(filename) =
365
+ deprecated("file.unlink", "file.remove")
366
+ file.remove(filename)
367
+ end
368
+
369
+ # Deprecated: was designed for transitions only and is not
370
+ # needed anymore. Use `file.out` instead.
371
+ # @flag deprecated
372
+ def fade.final(~id="fade.final", ~duration=3., ~type="lin", s) =
373
+ deprecated("fade.final", "fade.out")
374
+ fn = mkfade(start=1., stop=0., type=type, duration=duration, s)
375
+ should_play = ref(true)
376
+
377
+ def fn() =
378
+ v = fn()
379
+ if v == 0. then should_play := false end
380
+ v
381
+ end
382
+
383
+ s = fade.scale(id=id, fn, s)
384
+ switch([(should_play, s)])
385
+ end
386
+
387
+ # Deprecated: was designed for transitions only and is not
388
+ # needed anymore. Use `fade.in` instead.
389
+ # @flag deprecated
390
+ def fade.initial(~id="fade.initial", ~duration=3., ~type="lin", s) =
391
+ deprecated("fade.initial", "fade.in")
392
+ fn = mkfade(start=0., stop=1., type=type, duration=duration, s)
393
+ fade.scale(id=id, fn, s)
394
+ end
395
+
396
+ # Deprecated: use `process.read` instead.
397
+ # @flag deprecated
398
+ def get_process_output(%argsof(process.read), cmd) =
399
+ deprecated("get_process_output", "process.read")
400
+ process.read(%argsof(process.read), cmd)
401
+ end
402
+
403
+ # Deprecated: use `process.read.lines` instead.
404
+ # @flag deprecated
405
+ def get_process_lines(%argsof(process.read.lines), cmd) =
406
+ deprecated("get_process_lines", "process.read.lines")
407
+ process.read.lines(%argsof(process.read.lines), cmd)
408
+ end
409
+
410
+ # Deprecated: use `process.test` instead.
411
+ # @flag deprecated
412
+ def test_process(%argsof(process.test), cmd) =
413
+ deprecated("test_process", "process.test")
414
+ process.test(%argsof(process.test), cmd)
415
+ end
416
+
417
+ # Deprecated: use `process.run` instead.
418
+ # @flag deprecated
419
+ def system(command) =
420
+ deprecated("system", "process.run")
421
+ process.run(command)
422
+ end
423
+
424
+ # Deprecated: use `blank.detect` instead
425
+ # @flag deprecated
426
+ def on_blank(%argsof(blank.detect), f, s) =
427
+ deprecated("on_blank", "blank.detect")
428
+ s = blank.detect(%argsof(blank.detect), s)
429
+ s.on_blank(synchronous=true, f)
430
+ s
431
+ end
432
+
433
+ # Deprecated: use `blank.skip` instead
434
+ # @flag deprecated
435
+ def skip_blank(%argsof(blank.skip), s) =
436
+ deprecated("skip_blank", "blank.skip")
437
+ blank.skip(%argsof(blank.skip), s)
438
+ end
439
+
440
+ # Deprecated: use `blank.eat` instead
441
+ # @flag deprecated
442
+ def eat_blank(%argsof(blank.eat), s) =
443
+ deprecated("eat_blank", "blank.eat")
444
+ blank.eat(%argsof(blank.eat), s)
445
+ end
446
+
447
+ # Deprecated: use `blank.strip` instead
448
+ # @flag deprecated
449
+ def strip_blank(%argsof(blank.strip), s) =
450
+ deprecated("strip_blank", "blank.strip")
451
+ blank.strip(%argsof(blank.strip), s)
452
+ end
453
+
454
+ # Deprecated: use `time.local` instead
455
+ # @flag deprecated
456
+ def localtime(t) =
457
+ deprecated("localtime", "time.local")
458
+ time.local(t)
459
+ end
460
+
461
+ # Deprecated: use `time.utc` instead
462
+ # @flag deprecated
463
+ def gmtime(t) =
464
+ deprecated("gmtime", "time.utc")
465
+ time.utc(t)
466
+ end
467
+
468
+ # Deprecated: use `time` instead
469
+ # @flag deprecated
470
+ def gettimeofday() =
471
+ deprecated("gettimeofday", "time")
472
+ time()
473
+ end
474
+
475
+ # @flag deprecated
476
+ def output.preferred(~id=null, ~fallible=false, ~start=true, s) =
477
+ deprecated("output.preferred", "output")
478
+ output(id=id, fallible=fallible, start=start, s)
479
+ end
480
+
481
+ # Deprecated: use `output` instead.
482
+ # @flag deprecated
483
+ def out(s) =
484
+ deprecated("out", "output")
485
+ output(mksafe(s))
486
+ end
487
+
488
+ # Deprecated: use `input` instead.
489
+ # @flag deprecated
490
+ def in(~id=null, ~start=true, ~fallible=false) =
491
+ deprecated("in", "input")
492
+ input(id=id, start=start, fallible=fallible)
493
+ end
494
+
495
+ # Deprecated: use `source.available` instead.
496
+ # @flag deprecated
497
+ def mkavailable(
498
+ ~id="mkavailable",
499
+ ~active=getter(false),
500
+ ~available=getter(true),
501
+ s
502
+ ) =
503
+ deprecated("mkavailable", "source.available")
504
+ output.dummy(switch([(getter.function(active), s)]), fallible=true)
505
+ switch(id=id, [(getter.function(available), s)])
506
+ end
507
+
508
+ # Deprecated: use `at` instead.
509
+ # @flag deprecated
510
+ def at(pred, s) =
511
+ deprecated("at", "source.available")
512
+ source.available(s, pred)
513
+ end
514
+
515
+ https = ()
516
+
517
+ # Deprecated: use `http.get` instead.
518
+ # @flag deprecated
519
+ def https.get(%argsof(http.get), url) =
520
+ deprecated("https.get", "http.get")
521
+ http.get(%argsof(http.get), url)
522
+ end
523
+
524
+ # Deprecated: use `http.put` instead.
525
+ # @flag deprecated
526
+ def https.put(%argsof(http.put), url) =
527
+ deprecated("https.put", "http.put")
528
+ http.put(%argsof(http.put), url)
529
+ end
530
+
531
+ # Deprecated: use `http.post` instead.
532
+ # @flag deprecated
533
+ def https.post(%argsof(http.post), url) =
534
+ deprecated("https.post", "http.post")
535
+ http.post(%argsof(http.post), url)
536
+ end
537
+
538
+ # Deprecated: use `http.head` instead.
539
+ # @flag deprecated
540
+ def https.head(%argsof(http.head), url) =
541
+ deprecated("https.head", "http.head")
542
+ http.head(%argsof(http.head), url)
543
+ end
544
+
545
+ # Deprecated: use `http.delete` instead.
546
+ # @flag deprecated
547
+ def https.delete(%argsof(http.delete), url) =
548
+ deprecated("https.delete", "http.delete")
549
+ http.delete(%argsof(http.delete), url)
550
+ end
551
+
552
+ %ifdef input.http
553
+ # Deprecated: use `input.http` instead
554
+ # @flag deprecated
555
+ def input.https(%argsof(input.http), url) =
556
+ deprecated("input.https", "input.http")
557
+ input.http(%argsof(input.http), url)
558
+ end
559
+ %endif
560
+
561
+ %ifdef source.say_metadata
562
+ # Deprecated: use `source.say_metadata` instead
563
+ # @flag deprecated
564
+ def say_metadata(s, ~pattern) =
565
+ def pattern(m) =
566
+ pattern % m
567
+ end
568
+
569
+ source.say_metadata(pattern=pattern, s)
570
+ end
571
+ %endif
572
+
573
+ # Deprecated: use `playlist.parse.register` instead
574
+ # @flag deprecated
575
+ def add_playlist_parser(%argsof(playlist.parse.register), s) =
576
+ deprecated("add_playlist_parser", "playlist.parse.register")
577
+ playlist.parse.register(%argsof(playlist.parse.register), s)
578
+ end
579
+
580
+ # Deprecated: use `json.stringify` instead
581
+ # @flag deprecated
582
+ # @argsof json.stringify
583
+ def json_of(%argsof(json.stringify), v) =
584
+ deprecated("json_of", "json.stringify")
585
+ json.stringify(%argsof(json.stringify), v)
586
+ end
587
+
588
+ # Deprecated: use `json.parse` instead
589
+ # @flag deprecated
590
+ # @argsof json.parse
591
+ def of_json(%argsof(json.parse), v) =
592
+ deprecated("of_json", "json.parse")
593
+ json.parse(%argsof(json.parse), v)
594
+ end
595
+
596
+ # Deprecated: use `playlist` instead
597
+ # @flag deprecated
598
+ def playlist.reloadable(
599
+ ~id=null,
600
+ ~mime_type="",
601
+ ~mode="randomize",
602
+ ~on_track={()},
603
+ ~prefix="",
604
+ ~reload=0,
605
+ ~reload_mode="seconds",
606
+ uri
607
+ ) =
608
+ deprecated("playlist.reloadable", "playlist")
609
+ ignore(on_track)
610
+ playlist(
611
+ id=id,
612
+ mime_type=mime_type,
613
+ mode=mode,
614
+ prefix=prefix,
615
+ reload=reload,
616
+ reload_mode=reload_mode,
617
+ uri
618
+ )
619
+ end
620
+
621
+ # Deprecated: use `request.dynamic` instead
622
+ # @flag deprecated
623
+ def request.dynamic.list(%argsof(request.dynamic), f) =
624
+ deprecated("request.dynamic.list", "request.dynamic")
625
+ add = ref(fun (_) -> ())
626
+
627
+ def f() =
628
+ l = f()
629
+ if
630
+ l != []
631
+ then
632
+ let [r, ...q] = list.rev(l)
633
+ r = (r : request)
634
+ list.iter(add(), list.rev(q))
635
+ r
636
+ else
637
+ null
638
+ end
639
+ end
640
+
641
+ s = request.dynamic(%argsof(request.dynamic), f)
642
+ add := fun (r) -> ignore(s.add(r))
643
+ s
644
+ end
645
+
646
+ # Deprecated: use `process.run` instead
647
+ # @flag deprecated
648
+ def run_process(%argsof(process.run), p) =
649
+ deprecated("run_process", "process.run")
650
+ x = process.run(%argsof(process.run), p)
651
+ (x.stdout, x.stderr, ("#{x.status}", x.status.description))
652
+ end
653
+
654
+ # Deprecated: use `list.assoc.mem` instead
655
+ # @flag deprecated
656
+ def list.mem_assoc(x, y) =
657
+ deprecated("list.mem_assoc", "list.assoc.mem")
658
+ list.assoc.mem(x, y)
659
+ end
660
+
661
+ # Deprecated: use `runtime.gc.full_major` instead
662
+ # @flag deprecated
663
+ def garbage_collect() =
664
+ deprecated("garbage_collect", "runtime.gc.full_major")
665
+ runtime.gc.full_major()
666
+ end
667
+
668
+ # Deprecated: use `video.alpha.of_color`
669
+ # @flag deprecated
670
+ def video.transparent(%argsof(video.alpha.of_color), s) =
671
+ deprecated("video.transparent", "video.alpha.of_color")
672
+ video.alpha.of_color(%argsof(video.alpha.of_color), s)
673
+ end
674
+
675
+ # Deprecated: use `request.resolved`
676
+ # @flag deprecated
677
+ def request.ready(r) =
678
+ deprecated("request.ready", "request.resolved")
679
+ request.resolved(r)
680
+ end
681
+
682
+ # Deprecated: use `environment.get`
683
+ # @flag deprecated
684
+ def getenv(default="", v) =
685
+ deprecated("getenv", "environment.get")
686
+ environment.get(default=default, v)
687
+ end
688
+
689
+ # Deprecated: use `environment.set`
690
+ # @flag deprecated
691
+ def setenv(k, v) =
692
+ deprecated("setenv", "environment.set")
693
+ environment.set(k, v)
694
+ end
695
+
696
+ # Deprecated: use `getpid`
697
+ # @flag deprecated
698
+ def getpid() =
699
+ deprecated("getpid", "process.pid")
700
+ process.pid()
701
+ end
702
+
703
+ # Deprecated: use `file.mime`
704
+ # @flag deprecated
705
+ def get_mime(fname) =
706
+ deprecated("get_mime", "file.mime")
707
+ file.mime(fname) ?? ""
708
+ end
709
+
710
+ # Deprecated: use `string`.
711
+ # @flag deprecated
712
+ def string_of(s) =
713
+ deprecated("string_of", "string")
714
+ string(s)
715
+ end
716
+
717
+ # Deprecated: use `string.float`.
718
+ # @flag deprecated
719
+ def string_of_float(x) =
720
+ deprecated("string_of_float", "string.float")
721
+ string.float(x)
722
+ end
723
+
724
+ # Deprecated: use `protocol.add`.
725
+ # @flag deprecated
726
+ def add_protocol(%argsof(protocol.add), name, fn) =
727
+ deprecated("add_protocol", "protocol.add")
728
+ protocol.add(%argsof(protocol.add), name, fn)
729
+ end
730
+
731
+ # Deprecated: use `decoder.metadata.add`.
732
+ # @flag deprecated
733
+ def add_metadata_resolver(name, fn) =
734
+ deprecated("add_metadata_resolver", "decoder.metadata.add")
735
+ decoder.metadata.add(name, fn)
736
+ end
737
+
738
+ # Deprecated: use `source.mux.audio`.
739
+ # @flag deprecated
740
+ def mux_audio(%argsof(source.mux.audio), s) =
741
+ deprecated("mux_audio", "source.mux.audio")
742
+ source.mux.audio(%argsof(source.mux.audio), s)
743
+ end
744
+
745
+ # Deprecated: use `source.mux.video`.
746
+ # @flag deprecated
747
+ def mux_video(%argsof(source.mux.video), s) =
748
+ deprecated("mux_video", "source.mux.video")
749
+ source.mux.video(%argsof(source.mux.video), s)
750
+ end
751
+
752
+ # Deprecated: use `source.mux.midi`
753
+ # @flag deprecated
754
+ def mux_midi(%argsof(source.mux.midi), s) =
755
+ deprecated("mux_midi", "source.mux.midi")
756
+ source.mux.midi(%argsof(source.mux.midi), s)
757
+ end
758
+
759
+ # Deprecated: use `source.drop.audio`
760
+ # @flag deprecated
761
+ def drop_audio(%argsof(source.drop.audio), s) =
762
+ deprecated("drop_audio", "source.drop.audio")
763
+ source.drop.audio(%argsof(source.drop.audio), s)
764
+ end
765
+
766
+ # Deprecated: use `source.drop.video`
767
+ # @flag deprecated
768
+ def drop_video(%argsof(source.drop.video), s) =
769
+ deprecated("drop_video", "source.drop.video")
770
+ source.drop.video(%argsof(source.drop.video), s)
771
+ end
772
+
773
+ # Deprecated: use `source.drop.midi`
774
+ # @flag deprecated
775
+ def drop_midi(%argsof(source.drop.midi), s) =
776
+ deprecated("drop_midi", "source.drop.midi")
777
+ source.drop.midi(%argsof(source.drop.midi), s)
778
+ end
779
+
780
+ # Deprecated: use `source.drop.metadata`
781
+ # @flag deprecated
782
+ def drop_metadata(%argsof(source.drop.metadata), s) =
783
+ deprecated("drop_metadata", "source.drop.metadata")
784
+ source.drop.metadata(%argsof(source.drop.metadata), s)
785
+ end
786
+
787
+ # Deprecated: use `source.stereo`
788
+ # @flag deprecated
789
+ def audio_to_stereo(~id=null, s) =
790
+ deprecated("audio_to_stereo", "stereo")
791
+ stereo(id=id, s)
792
+ end
793
+
794
+ # Deprecated: use `source.tracks` and `source`
795
+ # @flag deprecated
796
+ def merge_tracks(~id=null, s) =
797
+ deprecated("merge_tracks", "source")
798
+ let {track_marks = _, ...tracks} = source.tracks(s)
799
+ source(id=id, tracks)
800
+ end
801
+
802
+ %ifdef compress
803
+ # Deprecated: use `compress`
804
+ # @flag deprecated
805
+ def compress.old(~id=null, s) =
806
+ deprecated("compress.old", "compress")
807
+ compress(id=id, s)
808
+ end
809
+ %endif
810
+
811
+ # Deprecated: use `thread.pause`
812
+ # @flag deprecated
813
+ def sleep(s) =
814
+ deprecated("sleep", "thread.pause")
815
+ thread.pause(s)
816
+ end
817
+
818
+ # Deprecated: use `video.add_rectangle`.
819
+ # @flag deprecated
820
+ def video.rectangle(%argsof(video.add_rectangle), s) =
821
+ video.add_rectangle(%argsof(video.add_rectangle), s)
822
+ end
823
+
824
+ # Deprecated: use `video.add_line`.
825
+ # @flag deprecated
826
+ def video.line(%argsof(video.add_line), src, tgt, s) =
827
+ video.add_line(%argsof(video.add_line), src, tgt, s)
828
+ end
829
+
830
+ # Deprecated: integrated into requests resolution.
831
+ # @flag deprecated
832
+ def cue_cut(
833
+ ~id=null(""),
834
+ ~cue_in_metadata="",
835
+ ~cue_out_metadata="",
836
+ ~on_cue_in=(fun () -> ()),
837
+ ~on_cue_out=(fun () -> ()),
838
+ s
839
+ ) =
840
+ ignore(id)
841
+ ignore(cue_in_metadata)
842
+ ignore(cue_out_metadata)
843
+ ignore(on_cue_in)
844
+ ignore(on_cue_out)
845
+ log.severe(
846
+ label="lang.deprecated",
847
+ "WARNING: cue_cut has been removed and integrated directly into requests \
848
+ resolution! This operator can be safely removed from your script now."
849
+ )
850
+ s
851
+ end
852
+
853
+ # Deprecated: use the on_metadata source method
854
+ # @flag deprecated
855
+ def on_metadata(~id:_, s, fn) =
856
+ log.severe(
857
+ label="lang.deprecated",
858
+ "Use the on_metadata source method!"
859
+ )
860
+ source.methods(s).on_metadata(synchronous=true, fn)
861
+ s
862
+ end
863
+
864
+ # Deprecated: use the on_track source method
865
+ # @flag deprecated
866
+ def on_track(~id:_, s, fn) =
867
+ log.severe(
868
+ label="lang.deprecated",
869
+ "Use the on_track source method!"
870
+ )
871
+ source.methods(s).on_track(synchronous=true, fn)
872
+ s
873
+ end
874
+
875
+ # Deprecated: use the last_metadata source method
876
+ # @flag deprecated
877
+ def source.last_metadata(~id:_, s) =
878
+ log.severe(
879
+ label="lang.deprecated",
880
+ "Use the last_metadata source method!"
881
+ )
882
+ source.methods(s).last_metadata()
883
+ end
884
+
885
+ # Deprecated: use the on_frame source method
886
+ # @flag deprecated
887
+ def source.on_frame(~id:_, ~before=true, s, fn) =
888
+ log.severe(
889
+ label="lang.deprecated",
890
+ "Use the on_frame source method!"
891
+ )
892
+ source.methods(s).on_frame(synchronous=true, before=before, fn)
893
+ end
894
+
895
+ # Deprecated: use the on_position source method
896
+ # @flag deprecated
897
+ def source.on_offset(
898
+ ~id:_,
899
+ ~force:allow_partial=false,
900
+ ~offset:position,
901
+ fn,
902
+ s
903
+ ) =
904
+ log.severe(
905
+ label="lang.deprecated",
906
+ "Use the on_position source method!"
907
+ )
908
+ source.methods(s).on_position(
909
+ synchronous=true,
910
+ remaining=false,
911
+ allow_partial=allow_partial,
912
+ position=position,
913
+ fn
914
+ )
915
+ end
916
+
917
+ # Deprecated: use the on_position source method
918
+ # @flag deprecated
919
+ def source.on_end(~id:_, ~delay:position, s, fn) =
920
+ log.severe(
921
+ label="lang.deprecated",
922
+ "Use the on_position source method!"
923
+ )
924
+ source.methods(s).on_position(
925
+ synchronous=true,
926
+ remaining=true,
927
+ allow_partial=false,
928
+ position=position,
929
+ fn
930
+ )
931
+ end
932
+
933
+ # Deprecated: use the insert_metadata source method
934
+ # @flag deprecated
935
+ def insert_metadata(~id:_=null, s) =
936
+ log.severe(
937
+ label="lang.deprecated",
938
+ "WARNING: `insert_metadata` operator is deprecated. Please use the \
939
+ `insert_metadata` source method!"
940
+ )
941
+ source.methods(s)
942
+ end
943
+
944
+ # Deprecated: use `normalize_track_gain`
945
+ # @flag deprecated
946
+ def replaygain(~id=null, s) =
947
+ log.severe(
948
+ label="lang.deprecated",
949
+ "Use the normalize_track_gain operator!"
950
+ )
951
+
952
+ def add_legacy_meta(m) =
953
+ if
954
+ m["replaygain_track_gain"] != ""
955
+ and m[settings.normalize_track_gain_metadata()] == ""
956
+ then
957
+ [(settings.normalize_track_gain_metadata(), m["replaygain_track_gain"])]
958
+ else
959
+ []
960
+ end
961
+ end
962
+
963
+ s = metadata.map(add_legacy_meta, s)
964
+
965
+ amplify(id=id, override=settings.normalize_track_gain_metadata(), 1., s)
966
+ end
967
+
968
+ # Deprecated: use json.object
969
+ # @flag deprecated
970
+ def replaces json() =
971
+ log.severe(
972
+ label="lang.deprecated",
973
+ "Use `json.object`"
974
+ )
975
+ json.object()
976
+ end