profile
viewpoint

dyc3/steamguard-cli 64

A linux utility for generating 2FA codes for Steam and managing Steam trade confirmations.

dyc3/opentogethertube 49

Watch videos with your friends. The spiritual successor to TogetherTube, preserving the spirit of it's simple to use interface, while improving it's look, feel, and reliability.

dyc3/AutoUpdateFramework 4

A basic framework written in C# for automatic updates.

dyc3/stream-autodj 2

A little program I use to play the background music that I made for my stream. Plays random loops for random durations and transitions between them correctly.

dyc3/AIDungeon 1

Infinite AI adventures await!

dyc3/crystal 1

Crystal is my custom virtual assistant, tailor made for my setup.

dyc3/SteamAuth 1

A C# library that provides vital Steam Mobile Authenticator functionality (modified for steamguard-cli)

az-inc/Ming-Dynasty 0

Project Ming (please don't download our buggy code)

dyc3/battleship 0

Battleship in python using tkinter. WIP

push eventdyc3/opentogethertube

Carson McManus

commit sha 889155d722a09b360f8daf3772c3c364d844bfbb

add a couple assertions to get rid of warnings

view details

Carson McManus

commit sha dfe0f090feadd47ce2988143372dd34c16cd4930

add chat tests

view details

Carson McManus

commit sha 57fc5aaa601b907b75931f8ff626d26cab163d07

add ProcessedText component tests

view details

Carson McManus

commit sha ea50a2120df7be4ca42fdba41757f97139e3b357

update dependencies

view details

push time in 3 hours

push eventdyc3/stream-autodj

Carson McManus

commit sha 0c406029e9299feedfbda6518f9dc19a97c16acc

Create LICENSE

view details

push time in 3 hours

PR closed dyc3/stream-autodj

Add license

I don't know what license do you want, but I chose what most people in Rust community seem to do: dual licensing under Apache License 2.0 and MIT License.

+236 -0

2 comments

3 changed files

protheory8

pr closed time in 3 hours

pull request commentdyc3/stream-autodj

Add license

I've decided to license under GNU GPLv3

protheory8

comment created time in 3 hours

delete branch dyc3/opentogethertube

delete branch : config-validation

delete time in 5 hours

push eventdyc3/opentogethertube

Carson McManus

commit sha 23e206b0c645c7e3b6e82b0b1b9bff1b00ca36d6

add some config validation

view details

Carson McManus

commit sha edc7c611de3402599a57664e037276288c963f83

Merge pull request #286 from dyc3/config-validation Config validation

view details

push time in 5 hours

PR merged dyc3/opentogethertube

Config validation enhancement server
+35 -0

1 comment

1 changed file

dyc3

pr closed time in 5 hours

push eventdyc3/opentogethertube

Carson McManus

commit sha 23e206b0c645c7e3b6e82b0b1b9bff1b00ca36d6

add some config validation

view details

push time in 6 hours

push eventdyc3/opentogethertube

Carson McManus

commit sha b7713918a9aab3ad456e511d3e9adf2ccba2b0be

dailymotion api key is not used

view details

Carson McManus

commit sha 9d8d5a231652b8d87693ef7beec7cacf7b89782b

reduce keep alive ping interval to 25 seconds should fix #272 again

view details

push time in 6 hours

issue closeddyc3/opentogethertube

Clients leave and join without user interaction at seemingly random intervals, which spams leave/join notifications

Current Behavior

The Join-Notification Snackbar pops up repeatedly in unspecific interval. This means: I join a room. Watch Videos and get in random interval the Join-Notification of me or other users displayed.

How To Reproduce

Just watch Videos and wait. Maybe it's cause of a short connection loss due SocketIO?

Expected behavior

Just show the Snackbar, if the user really joined the room.

Environment

  • [x] This happens on the official site: opentogethertube.com
  • [X] This happens using a self-hosted version.

Desktop (please complete the following information):

  • OS: Windows 10
  • Browser: Firefox & Chrome
  • Version: FF 77.0.1 | Chrome 83.0.4103.106

closed time in 6 hours

XeroxDev

PR opened dyc3/opentogethertube

Config validation enhancement server
+35 -1

0 comment

2 changed files

pr created time in 6 hours

create barnchdyc3/opentogethertube

branch : config-validation

created branch time in 6 hours

issue commentdyc3/opentogethertube

Clients leave and join without user interaction at seemingly random intervals, which spams leave/join notifications

According to the heroku docs, the connection timeout is 30 seconds. https://devcenter.heroku.com/articles/request-timeout All we need to do is increase the frequency of the ping messages to keep the connection alive.

XeroxDev

comment created time in 6 hours

IssuesEvent

delete branch dyc3/stream-autodj

delete branch : fix-loop-specific-endings

delete time in a day

push eventdyc3/stream-autodj

Carson McManus

commit sha e2a8fbd14c110cbdd4c08425695afc7da7498d37

add better support for ending on a loop specific ending

view details

Carson McManus

commit sha 3b2aa3c16ecbe1713035ef8d8b30db9709a7b463

remove commented code

view details

Carson McManus

commit sha ec95428602cae9a9b1b85f4a1895a7048fff4dd0

update README

view details

Carson McManus

commit sha d213c4b280716864c083750b0dfe3106114fbd16

hacky fix for song_strategy

view details

Carson McManus

commit sha e66cece221f8ed2f94c4514918b7543288bed021

run cargo fmt

view details

Carson McManus

commit sha bb3a7b9644b5f80f42e438e3daa1dd407d4c3d08

redo song planner

view details

Carson McManus

commit sha 0eaf1e076ddb6de3b284d00827f82774d8751fd2

Merge pull request #10 from dyc3/fix-loop-specific-endings add better support for ending on a loop specific ending

view details

push time in a day

PR merged dyc3/stream-autodj

add better support for ending on a loop specific ending enhancement

This PR finishes up loose ends for supporting ending songs with a specific loop end.

For example, a song must end on loop0-end, which can only be played after loop0.

closes #12

+119 -34

0 comment

3 changed files

dyc3

pr closed time in a day

issue closeddyc3/stream-autodj

Song planner needs to be more controllable

Ideally, the song planner should guarantee that a plan won't ever get too long. After a plan reaches a certain length, it should stop picking transitions at random and start finding a direct route to the end, if applicable.

closed time in a day

dyc3

push eventdyc3/stream-autodj

protheory8

commit sha b8510ca65b4491d9fc5525b0a5ab5bb5f0584028

Check formatting in CI

view details

protheory8

commit sha 9ed116fe3e275dc4134dbe8c4198784d70b715e7

Fix typo in workflow file

view details

protheory8

commit sha 6c468be78ebe657ca986fe42b89bdbfd02a3dfd0

Rearrange arguments in workflow file

view details

protheory8

commit sha 71d7deca2bd375d488f1458174ea10d717aea544

Rearrange steps in workflow file

view details

Carson McManus

commit sha 2e73ca64fbbfb2be86869712bc06c340e3be19e7

Merge pull request #14 from protheory8/check-fmt-in-ci Check formatting in CI

view details

protheory8

commit sha 40e907a2cb369f40d7a952b5f66ed78b84420d90

Fix error handling

view details

protheory8

commit sha 1f67dc955cbf81fa7862fa8882b7f05f376ff6ca

Format code

view details

protheory8

commit sha a1175a25807b55c5c01ccb72733fa92b6cd383f2

Fix typos

view details

protheory8

commit sha eb2dc7d47edf651014b80e3b35371d4c8614332b

Remove comment

view details

protheory8

commit sha 4db07941ac0d50b61b9f1927133a34467289637b

Rename AppError to DjError

view details

Carson McManus

commit sha 926c3f9bee74e42e036155084ceeb198556d5c92

Merge pull request #15 from protheory8/fix-error-handling Fix error handling

view details

Carson McManus

commit sha a650d913ac7fc3647b72e03965efdf4aad4cb174

Merge branch 'master' of github.com:dyc3/stream-autodj

view details

Carson McManus

commit sha 9e8f2d910dbf2574120877fd5c8cc86de5c8e3d7

add type annotation

view details

protheory8

commit sha 68da86a106e459ee97c0c9fa5779f9773ca7ceaf

Fix clippy warnings

view details

Conner Bondurant

commit sha 31043b38a66e62ef1252f5abc7ba19df8cf8667a

Remove assumption of song_ prefix

view details

Conner Bondurant

commit sha 1da702e5b0f95fa91b0c3f230245d92e582f598e

run cargo fmt

view details

Carson McManus

commit sha 9838b72b3bd9ec38b4ec7c1f8654223db626c2f3

Merge pull request #17 from protheory8/fix-clippy-warnings Fix clippy warnings

view details

Carson McManus

commit sha a193a81cff45359424bbb240360f95e1d1dfcbda

Merge branch 'master' into remove-required-prefix

view details

Carson McManus

commit sha 936f6d584548df13a06ad03c1f565c4ff88dd135

Merge pull request #18 from cbondurant/remove-required-prefix Remove assumption of song_ prefix

view details

Carson McManus

commit sha 5f8fc79d5e8c981925dcfac963a1a4213fb551d0

improve tests to account for new behavior

view details

push time in 2 days

push eventdyc3/stream-autodj

Carson McManus

commit sha 5f8fc79d5e8c981925dcfac963a1a4213fb551d0

improve tests to account for new behavior

view details

push time in 2 days

PR merged dyc3/stream-autodj

Remove assumption of song_ prefix enhancement

Just finishing changes to resolve #8.

Notable changes include

  • Now uses all elements before the final _ as the song id, and does not assume that files begin with song_

  • This change caused test_song_parsing::prop_multiloop_song_should_not_contain_references_to_loop to fail, revealing that its file name generation allowed for empty song id's. eg _song.wav. This was changed to always have at least one character for the song id.

  • Other tests that relied on song id's were changed so that they referred to the new song id's, rather than changing the filenames used for the tests.

+27 -26

0 comment

1 changed file

cbondurant

pr closed time in 2 days

push eventdyc3/stream-autodj

Conner Bondurant

commit sha 31043b38a66e62ef1252f5abc7ba19df8cf8667a

Remove assumption of song_ prefix

view details

Conner Bondurant

commit sha 1da702e5b0f95fa91b0c3f230245d92e582f598e

run cargo fmt

view details

Carson McManus

commit sha a193a81cff45359424bbb240360f95e1d1dfcbda

Merge branch 'master' into remove-required-prefix

view details

Carson McManus

commit sha 936f6d584548df13a06ad03c1f565c4ff88dd135

Merge pull request #18 from cbondurant/remove-required-prefix Remove assumption of song_ prefix

view details

push time in 2 days

issue closeddyc3/stream-autodj

Reason for `song_` prefix?

I was looking into making the song initialization more robust and able to recover from errors that should not result in panic (single files that are not valid audio files being skipped instead of causing a panic for instance).

While working on this I notice that the song_ prefix is both expected, but not enforced. You can currently have any prefix at all, eg test_, song_, fake_, etc.

Should the requirement for the prefix be enforced, or should it be removed entirely? repaced with a songname_segmentID.format syntax instead?

closed time in 2 days

cbondurant

push eventcbondurant/stream-autodj

protheory8

commit sha 68da86a106e459ee97c0c9fa5779f9773ca7ceaf

Fix clippy warnings

view details

Carson McManus

commit sha 9838b72b3bd9ec38b4ec7c1f8654223db626c2f3

Merge pull request #17 from protheory8/fix-clippy-warnings Fix clippy warnings

view details

Carson McManus

commit sha a193a81cff45359424bbb240360f95e1d1dfcbda

Merge branch 'master' into remove-required-prefix

view details

push time in 2 days

Pull request review commentdyc3/opentogethertube

[WIP] Service adapters

+const URL = require("url");+const axios = require("axios");+const ServiceAdapter = require("../serviceadapter");+const { InvalidVideoIdException } = require("../exceptions");+const Video = require("../../common/video");++class DailyMotionAdapter extends ServiceAdapter {+  static SERVICE_ID = "dailymotion";

v10.15.3, but I also tried with v12.18.3 and I got the same thing. When did this get added to node?

Butt4cak3

comment created time in 2 days

Pull request review commentdyc3/opentogethertube

[WIP] Service adapters

+const URL = require("url");+const axios = require("axios");+const ServiceAdapter = require("../serviceadapter");+const { InvalidVideoIdException } = require("../exceptions");+const Video = require("../../common/video");++class DailyMotionAdapter extends ServiceAdapter {+  static SERVICE_ID = "dailymotion";
/home/carson/Documents/code/opentogethertube/server/services/dailymotion.js:8
  static SERVICE_ID = "dailymotion";
                    ^

SyntaxError: Unexpected token =
    at new Script (vm.js:80:7)
    at createScript (vm.js:274:10)
    at Object.runInThisContext (vm.js:326:10)
    at Module._compile (internal/modules/cjs/loader.js:664:28)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/home/carson/Documents/code/opentogethertube/server/infoextractor.js:3:28)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
    at Function.Module._load (internal/modules/cjs/loader.js:531:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)
    at Object.<anonymous> (/home/carson/Documents/code/opentogethertube/roommanager.js:6:21)
    at Module._compile (internal/modules/cjs/loader.js:701:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
    at Module.load (internal/modules/cjs/loader.js:600:32)
Butt4cak3

comment created time in 3 days

Pull request review commentdyc3/opentogethertube

[WIP] Service adapters

+const URL = require("url");+const axios = require("axios");+const ServiceAdapter = require("../serviceadapter");+const { InvalidVideoIdException } = require("../exceptions");+const Video = require("../../common/video");++class DailyMotionAdapter extends ServiceAdapter {+  static SERVICE_ID = "dailymotion";

I'm getting a syntax error here for some reason

Butt4cak3

comment created time in 3 days

pull request commentdyc3/opentogethertube

[WIP] Service adapters

I still can't query the YouTube API from my local testing environment.

Check to see if env/development.env has the API key like this

YOUTUBE_API_KEY=AI32km....

Other than that, I'm not sure what the problem could be.

Butt4cak3

comment created time in 3 days

Pull request review commentdyc3/opentogethertube

[WIP] Service adapters

+const URL = require("url");+const DailyMotionAdapter = require("./services/dailymotion");+const GoogleDriveAdapter = require("./services/googledrive");+const VimeoAdapter = require("./services/vimeo");+const YouTubeAdapter = require("./services/youtube");+const DirectVideoAdapter = require("./services/direct");+const storage = require("../storage");+const Video = require("../common/video");+const { UnsupportedMimeTypeException, OutOfQuotaException } = require("./exceptions");+const { getLogger } = require("../logger");++const log = getLogger("infoextract");++const adapters = [+  new DailyMotionAdapter(),+  new GoogleDriveAdapter(),+  new VimeoAdapter(),+  new YouTubeAdapter(process.env.YOUTUBE_API_KEY),+  new DirectVideoAdapter(),+];++function isURL(str) {+  return URL.parse(str).host != null;+}++/**+ * Returns a cached video and an array with property names. The property names indicate which+ * properties are still missing from the cache. On a cache miss, this function will return an empty+ * video object.+ * @param {string} service+ * @param {string} videoId+ * @returns {[string, string[]]}+ */+async function getCachedVideo(service, videoId) {+  try {+    const result = await storage.getVideoInfo(service, videoId);+    const video = new Video(result);+    const missingInfo = storage+      .getVideoInfoFields(video.service)+      .filter(p => !video.hasOwnProperty(p));++    if (video.mime && !this.isSupportedMimeType(video.mime)) {+      throw new UnsupportedMimeTypeException(video.mime);+    }

Definitely not the right place to throw this exception

Butt4cak3

comment created time in 3 days

Pull request review commentdyc3/opentogethertube

[WIP] Service adapters

 class ServiceAdapter {     return false;   } +  /**+   * Determines whether a given URL points to a collection of videos.+   * @param {string} url+   * @returns {boolean}+   */+  isCollectionURL() {+    throw `Service ${this.serviceId} does not implement method isCollectionURL`;

These should throw some kind of exception instead of just a string

Butt4cak3

comment created time in 3 days

push eventdyc3/stream-autodj

protheory8

commit sha 68da86a106e459ee97c0c9fa5779f9773ca7ceaf

Fix clippy warnings

view details

Carson McManus

commit sha 9838b72b3bd9ec38b4ec7c1f8654223db626c2f3

Merge pull request #17 from protheory8/fix-clippy-warnings Fix clippy warnings

view details

push time in 3 days

push eventdyc3/opentogethertube

Carson McManus

commit sha fcb210d6021ac73aea1e97039114e2aba5f31f7d

fix spacing issue in production

view details

push time in 4 days

pull request commentdyc3/opentogethertube

[WIP] Service adapters

Something that I would like to see in this implementation is to make it easier to do pagination

Butt4cak3

comment created time in 4 days

pull request commentdyc3/opentogethertube

[WIP] Service adapters

The one thing I couldn't figure out so far is dealing with YouTube video links that also include a playlist id

The way we handled it before is to get the playlist, and "highlight" the video with the matching id at the top of the add preview on the client side by setting video.highlight = true.

Butt4cak3

comment created time in 4 days

issue closeddyc3/opentogethertube

Can't get add previews with Youtube channels that don't have the ID at the end of the URL path

Current Behavior

When requesting add preview, youtube channels that have an additional path after the ID don't succeed.

Examples:

  • https://www.youtube.com/channel/UCdBK94H6oZT2Q7l0-b0xmMg/videos
  • https://www.youtube.com/user/vinesauce/videos

How To Reproduce

<!-- REQUIRED --> Steps to reproduce the behavior:

  1. Create a temporary room
  2. Put one of the example youtube channel links above in the add preview text box
  3. Add preview fails to load

Expected behavior

Expected to get add preview for the channel

Environment

<!-- Check off all applicable statements with an x. If you don't know if the statement applies, leave it blank. -->

  • [x] This happens on the official site: opentogethertube.com
  • [x] This happens using a self-hosted version.

closed time in 4 days

dyc3

issue openeddyc3/opentogethertube

Add previews for some youtube channel urls don't work

Current Behavior

Some short channel urls don't show videos when put into add preview.

Examples:

  • https://www.youtube.com/c/BoshMind

How To Reproduce

<!-- REQUIRED --> Steps to reproduce the behavior:

  1. Put https://www.youtube.com/c/BoshMind in the add preview box
  2. No videos appear

Expected behavior

Expected videos from BoshMind to appear

Screenshots

<!-- If applicable, add screenshots to help explain your problem. If you don't have any screenshots, omit this section. -->

Environment

<!-- Check off all applicable statements with an x. If you don't know if the statement applies, leave it blank. -->

  • [x] This happens on the official site: opentogethertube.com
  • [x] This happens using a self-hosted version.

Additional context

<!-- Add any other context about the problem here. -->

created time in 4 days

pull request commentdyc3/opentogethertube

[WIP] Service adapters

I think the hardest bit is going to be abstracting out the parts that grab multiple videos at a time (youtube playlists/channels, google drive folders, etc).

Butt4cak3

comment created time in 4 days

Pull request review commentdyc3/opentogethertube

[WIP] Service adapters

+class ServiceAdapter {+  /**+   * A string that identifies this service adapter.+   */+  get serviceId() {+    if (this.constructor.SERVICE_ID == null) {+      throw `Service adapter ${this.constructor.name} does not have a static SERVICE_ID property`;+    }++    return this.constructor.SERVICE_ID;+  }++  /**+   * A boolean that indicates whether video metadata can be safely cached.+   * @returns {boolean}+   */+  get cacheSafe() {+    return true;+  }++  /**+   * Returns true if this service adapter can handle a given link.+   * @param {string} link+   * @returns {boolean}+   */+  canHandleLink() {+    return false;+  }++  /**+   * Fetches video metadata from the API.+   * @param {string} videoId+   * @returns {Promise}+   */+  getVideoInfo(videoId, onlyProperties) {+    return this._getVideoInfo(videoId, onlyProperties);+  }

I don't really like having getVideoInfo and then _getVideoInfo for the derived service adapters. Can we just have getVideoInfo?

Butt4cak3

comment created time in 4 days

Pull request review commentdyc3/opentogethertube

[WIP] Service adapters

+class ServiceAdapter {+  /**+   * A string that identifies this service adapter.+   */+  get serviceId() {+    if (this.constructor.SERVICE_ID == null) {+      throw `Service adapter ${this.constructor.name} does not have a static SERVICE_ID property`;+    }++    return this.constructor.SERVICE_ID;+  }++  /**+   * A boolean that indicates whether video metadata can be safely cached.+   * @returns {boolean}+   */+  get cacheSafe() {
  get isCacheSafe() {
Butt4cak3

comment created time in 4 days

pull request commentdyc3/opentogethertube

[WIP] Service adapters

I've been meaning to do something like this for a while, just wasn't exactly sure of the approach I wanted to take.

Butt4cak3

comment created time in 4 days

fork dyc3/rodio

Rust audio playback library

fork in 4 days

CommitCommentEvent

push eventdyc3/stream-autodj

Carson McManus

commit sha 9e8f2d910dbf2574120877fd5c8cc86de5c8e3d7

add type annotation

view details

push time in 4 days

push eventdyc3/stream-autodj

Carson McManus

commit sha 3f7bac0c250164995e3bff604b72b8bc0ed827a7

update readme

view details

Carson McManus

commit sha a650d913ac7fc3647b72e03965efdf4aad4cb174

Merge branch 'master' of github.com:dyc3/stream-autodj

view details

push time in 4 days

push eventdyc3/stream-autodj

protheory8

commit sha 40e907a2cb369f40d7a952b5f66ed78b84420d90

Fix error handling

view details

protheory8

commit sha 1f67dc955cbf81fa7862fa8882b7f05f376ff6ca

Format code

view details

protheory8

commit sha a1175a25807b55c5c01ccb72733fa92b6cd383f2

Fix typos

view details

protheory8

commit sha eb2dc7d47edf651014b80e3b35371d4c8614332b

Remove comment

view details

protheory8

commit sha 4db07941ac0d50b61b9f1927133a34467289637b

Rename AppError to DjError

view details

Carson McManus

commit sha 926c3f9bee74e42e036155084ceeb198556d5c92

Merge pull request #15 from protheory8/fix-error-handling Fix error handling

view details

push time in 4 days

PR merged dyc3/stream-autodj

Fix error handling enhancement refactor

This is really big, review carefully.

These things I added into Cargo.toml make all dependencies and the project itself slower to compile, but it might produce faster code (only in release mode) (more info).

+180 -113

10 comments

5 changed files

protheory8

pr closed time in 4 days

pull request commentdyc3/stream-autodj

Fix error handling

Btw, if you specify max-repeats to be 5 or lower, it panics.

Yeah I figured. Separate issue.

protheory8

comment created time in 4 days

Pull request review commentdyc3/stream-autodj

Fix error handling

 mod test_song_segments { 	} } -pub enum FileFormat {+pub enum FileType { 	SegmentFormat, 	SongArchiveFormat,-	InvalidFormat, } -pub fn detect_file_type(path: &Path) -> FileFormat {-	let extension = path.file_name().unwrap().to_str().unwrap().split(".").last().unwrap();+pub fn detect_file_type(file_name: &str) -> Result<FileType, AppError> {+	let extension = file_name.split(".").last().unwrap(); 	match extension {-		"wav" | "ogg" | "mp3" | "flac" => FileFormat::SegmentFormat,-		"zip" => FileFormat::SongArchiveFormat,-		_ => FileFormat::InvalidFormat,+		"wav" | "ogg" | "mp3" | "flac" => Ok(FileType::SegmentFormat),+		"zip" => Ok(FileType::SongArchiveFormat),+		_ => Err(AppError::UnrecognizedSongFormat(file_name.to_string())),

Ah you're right

protheory8

comment created time in 4 days

Pull request review commentdyc3/stream-autodj

Fix error handling

+use std::{error::Error, fmt};++#[derive(Debug, Clone, PartialEq, Eq)]+pub enum AppError {
pub enum DjError {
protheory8

comment created time in 4 days

Pull request review commentdyc3/stream-autodj

Fix error handling

 mod test_song_segments { 	} } -pub enum FileFormat {+pub enum FileType { 	SegmentFormat, 	SongArchiveFormat,-	InvalidFormat, } -pub fn detect_file_type(path: &Path) -> FileFormat {-	let extension = path.file_name().unwrap().to_str().unwrap().split(".").last().unwrap();+pub fn detect_file_type(file_name: &str) -> Result<FileType, AppError> {+	let extension = file_name.split(".").last().unwrap(); 	match extension {-		"wav" | "ogg" | "mp3" | "flac" => FileFormat::SegmentFormat,-		"zip" => FileFormat::SongArchiveFormat,-		_ => FileFormat::InvalidFormat,+		"wav" | "ogg" | "mp3" | "flac" => Ok(FileType::SegmentFormat),+		"zip" => Ok(FileType::SongArchiveFormat),+		_ => Err(AppError::UnrecognizedSongFormat(file_name.to_string())),

Instead of straight up failing when we encounter an unexpected file, we should just ignore the file.

protheory8

comment created time in 4 days

pull request commentdyc3/stream-autodj

Check formatting in CI

Yeah but I don't think that there's a way around it. For everything else in this project, you shouldn't use the nightly toolchain. You don't have to set nightly as your default toolchain.

protheory8

comment created time in 4 days

push eventdyc3/stream-autodj

Conner Bondurant

commit sha 2c09908f4d178816416d68632ae87baf6c504bba

Add basic checking for format in song init

view details

Conner Bondurant

commit sha 68d1727c807f3fbcefa60758f28fa40588203935

Add detection of zip archives

view details

Conner Bondurant

commit sha e7dfe43a9718e0745fb12ffeab62227e84f1b41f

Refactor out parsing of filename

view details

Conner Bondurant

commit sha 82301f3307f37df7dc6d0a52cc4ab5435b214eaf

Remove redundant set checks

view details

Conner Bondurant

commit sha 3c53d21e0bb592cf34876950a09e47bcf8d860a8

Add parsing and loading of archived songs

view details

Conner Bondurant

commit sha b55967f915507186fddf9e7f18da2d7a24a60bd0

Change archive status to be per-song.

view details

Conner Bondurant

commit sha 59dd12dfd1d6908fac8df45289c66ab224122fff

Add test data for tests using file-reads

view details

Conner Bondurant

commit sha da62d164cc56334f619f962be3492cd26259bf19

Revert "Add test data for tests using file-reads" This reverts commit 59dd12dfd1d6908fac8df45289c66ab224122fff.

view details

Conner Bondurant

commit sha 8a396ae544ae71f07fcc5cb3ada41448fdf4fcf2

Remove file read checks from init, add archive test

view details

Conner Bondurant

commit sha f0faf6189744dbc995edfc87c975ce12b0b7ef89

Add file that was not added to last commit on accident

view details

Conner Bondurant

commit sha 511b85dafad57c64942c6d9e6eaa681617b92083

style cleanup using fmt

view details

Conner Bondurant

commit sha b8feb407864fcc25d68fc84a9231437cdc147603

Undo damage caused by fmt

view details

Conner Bondurant

commit sha f36cf46e41fca008cde76e6af4ca4c42901a891a

remove unneeded segment name modification

view details

Carson McManus

commit sha e1d6bea9b02bb77a0824862639841c59a84316bd

Merge pull request #9 from cbondurant/add-file-detection Add support for zipped song files

view details

Carson McManus

commit sha e0c6a412618531abe39683de2b0a9e1e139d8436

add rustfmt rules, uses unstable rules

view details

Carson McManus

commit sha b9cae7a3476a4272e05002e92e09187737a75347

run cargo fmt

view details

Carson McManus

commit sha bcf441c64540d0780fa7667896af30f64473456b

fix CI

view details

Carson McManus

commit sha 1dce59542e77293b0e8479b023995fcbeea529be

fix CI again

view details

Carson McManus

commit sha c960bbad9bf4be0cdda550db0006d0e9cf671679

maybe fix CI?

view details

Carson McManus

commit sha fa72e127a2dc46dad9141a552f5e907f6befb738

god please pass

view details

push time in 4 days

pull request commentdyc3/stream-autodj

Check formatting in CI

Install the nightly toolchain, and use cargo +nightly fmt to format the code

protheory8

comment created time in 4 days

push eventdyc3/stream-autodj

protheory8

commit sha b8510ca65b4491d9fc5525b0a5ab5bb5f0584028

Check formatting in CI

view details

protheory8

commit sha 9ed116fe3e275dc4134dbe8c4198784d70b715e7

Fix typo in workflow file

view details

protheory8

commit sha 6c468be78ebe657ca986fe42b89bdbfd02a3dfd0

Rearrange arguments in workflow file

view details

protheory8

commit sha 71d7deca2bd375d488f1458174ea10d717aea544

Rearrange steps in workflow file

view details

Carson McManus

commit sha 2e73ca64fbbfb2be86869712bc06c340e3be19e7

Merge pull request #14 from protheory8/check-fmt-in-ci Check formatting in CI

view details

push time in 4 days

PR merged dyc3/stream-autodj

Check formatting in CI

Didn't test.

+7 -4

4 comments

1 changed file

protheory8

pr closed time in 4 days

pull request commentdyc3/stream-autodj

Check formatting in CI

Well, it looks like it works

protheory8

comment created time in 4 days

push eventdyc3/stream-autodj

Carson McManus

commit sha 0895f71e98c317ba7b8f7a68462857afff4b5eb0

remove printlns

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha 26402b3148926660e1b51946d7e9ec0ca62d2fae

i give up

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha 451241c6e12ac7a82d7e61a387f48475d2387074

i give up

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha c23367e3400366012cd279f8f46e5c5dbe706aac

fuck stability

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha 6e1890e91948be70ac38a2b9816cb2b1eaaf9e65

i really don't know what im doing anymore

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha fec991141603fb8a7ffba2405369966728677cae

fuck

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha cbd75e7f6beaaa31a74311a0e6400508f003aaf8

ok no seriously

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha fa72e127a2dc46dad9141a552f5e907f6befb738

god please pass

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha c960bbad9bf4be0cdda550db0006d0e9cf671679

maybe fix CI?

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha 1dce59542e77293b0e8479b023995fcbeea529be

fix CI again

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha bcf441c64540d0780fa7667896af30f64473456b

fix CI

view details

push time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha e0c6a412618531abe39683de2b0a9e1e139d8436

add rustfmt rules, uses unstable rules

view details

Carson McManus

commit sha b9cae7a3476a4272e05002e92e09187737a75347

run cargo fmt

view details

push time in 5 days

push eventdyc3/stream-autodj

Conner Bondurant

commit sha 2c09908f4d178816416d68632ae87baf6c504bba

Add basic checking for format in song init

view details

Conner Bondurant

commit sha 68d1727c807f3fbcefa60758f28fa40588203935

Add detection of zip archives

view details

Conner Bondurant

commit sha e7dfe43a9718e0745fb12ffeab62227e84f1b41f

Refactor out parsing of filename

view details

Conner Bondurant

commit sha 82301f3307f37df7dc6d0a52cc4ab5435b214eaf

Remove redundant set checks

view details

Conner Bondurant

commit sha 3c53d21e0bb592cf34876950a09e47bcf8d860a8

Add parsing and loading of archived songs

view details

Conner Bondurant

commit sha b55967f915507186fddf9e7f18da2d7a24a60bd0

Change archive status to be per-song.

view details

Conner Bondurant

commit sha 59dd12dfd1d6908fac8df45289c66ab224122fff

Add test data for tests using file-reads

view details

Conner Bondurant

commit sha da62d164cc56334f619f962be3492cd26259bf19

Revert "Add test data for tests using file-reads" This reverts commit 59dd12dfd1d6908fac8df45289c66ab224122fff.

view details

Conner Bondurant

commit sha 8a396ae544ae71f07fcc5cb3ada41448fdf4fcf2

Remove file read checks from init, add archive test

view details

Conner Bondurant

commit sha f0faf6189744dbc995edfc87c975ce12b0b7ef89

Add file that was not added to last commit on accident

view details

Conner Bondurant

commit sha 511b85dafad57c64942c6d9e6eaa681617b92083

style cleanup using fmt

view details

Conner Bondurant

commit sha b8feb407864fcc25d68fc84a9231437cdc147603

Undo damage caused by fmt

view details

Conner Bondurant

commit sha f36cf46e41fca008cde76e6af4ca4c42901a891a

remove unneeded segment name modification

view details

Carson McManus

commit sha e1d6bea9b02bb77a0824862639841c59a84316bd

Merge pull request #9 from cbondurant/add-file-detection Add support for zipped song files

view details

push time in 5 days

PR merged dyc3/stream-autodj

Add support for zipped song files enhancement

This was originally going to simply add bail-out testing in initialize_songs but I kinda went overboard and added full support for a zipped format of song.

The way it works is that the zip folder represents a single song, format song_songname.zip with all files at the root directory, of the format segmentID.format

In order to test the kind of file, it required opening the file in initialize_songs this unfortunately broke the tests that relied on that function, as they will now attempt to read the files used for testing and fail. I am not sure what the correct strategy is to resolve that at this time.

The checking of files at init time allows for them to be ignored before added to the song list, which is an error that can be recovered from much more gracefully than when trying to play the song, only to find it is errored out.

The addition of zip files allows for more easily sharing and moving songs, especially ones that may have a very large number of segments.

Marking as draft because tests do not currently run correctly.

+262 -63

14 comments

4 changed files

cbondurant

pr closed time in 5 days

Pull request review commentdyc3/stream-autodj

Add support for zipped song files

 mod test_song_segments { 		assert!(SongSegment { 			id: "end".to_string(), 			format:"wav".to_string(),-			allowed_transitions: set!()+			allowed_transitions: set!(), 		}.is_end());  		assert!(SongSegment { 			id: "loop0-end".to_string(), 			format:"wav".to_string(),-			allowed_transitions: set!()+			allowed_transitions: set!(), 		}.is_end()); 	} } +pub enum FileFormat {+	SegmentFormat,+	SongArchiveFormat,+	InvalidFormat+}++pub fn detect_file_type(path: &Path) -> FileFormat{+	let extension = path.file_name().unwrap().to_str().unwrap().split(".").last().unwrap();+	match extension{+		"wav"|"ogg"|"mp3"|"flac" => {FileFormat::SegmentFormat},+		"zip" => {FileFormat::SongArchiveFormat}+		_ => {FileFormat::InvalidFormat}+	}+}++pub fn get_song_name(file_name: &str) -> String {++	file_name.split("_").collect::<Vec<&str>>()[1].to_string().split(".").next().unwrap().to_owned()+}++pub fn parse_segment(file_name: &str) -> Option<SongSegment> {+	let mut name_split = file_name.split('_');+	if name_split.next().unwrap() != "song"{}+	let _ = name_split.next()?.to_string();+	let mut song_segment_split = name_split.next()?.split(".");+	let song_segment_id = song_segment_split.next().expect("File missing ID");+	let song_segment_format = song_segment_split.next().expect("Could not find file format");+	let segment = SongSegment {+		id: song_segment_id.to_string(),+		format:song_segment_format.to_string(),+		allowed_transitions: HashSet::<String>::new(),+		+	};+	Some(segment)+}+ pub fn initialize_songs<P: AsRef<Path>>(paths: &[P]) -> HashMap<String, Song> { 	let mut songs = HashMap::new(); 	for path in paths { 		let path = path.as_ref();-		let file_name = path.file_name().unwrap().to_str().unwrap().to_string();-		let name_split = file_name.split('_').collect::<Vec<_>>();-		let song_id = name_split[1].to_string();-		let song_segment_split = name_split[2].split(".").collect::<Vec<_>>();-		let song_segment_id = song_segment_split[0].to_string();-		let song_segment_format = song_segment_split[1].to_string();-		let song = songs.entry(song_id.clone()).or_insert(Song {-			id: song_id,-			segments: HashMap::<String, SongSegment>::new(),-			has_end: false,-			has_multiple_loops: false,-			has_dedicated_transitions: false-		});-		if !song.has_end && song_segment_id == "end"{-			song.has_end = true;-		}-		if !song.has_multiple_loops && song_segment_id != "loop" && REGEX_IS_LOOP.is_match(&song_segment_id) {-			song.has_multiple_loops = true;-		}-		if !song.has_dedicated_transitions && REGEX_IS_DEDICATED_TRANSITION.is_match(&song_segment_id) {-			song.has_dedicated_transitions = true;-		}-		if song.segments.contains_key(&song_segment_id) {-			// Panic here, because having multiple files with the same ID is ambiguous-			panic!(format!("Found multiple segments with same ID: Song: {} Segment: {}", song.id, song_segment_id))+		match detect_file_type(path){+			FileFormat::SegmentFormat => {+				let song_id = get_song_name(path.file_name().unwrap().to_str().unwrap());+				let segment = parse_segment(path.file_name().unwrap().to_str().unwrap()).unwrap();+				let song = songs.entry(song_id.to_string()).or_insert(Song {+					id: song_id,+					segments: HashMap::<String, SongSegment>::new(),+					has_end: false,+					has_multiple_loops: false,+					has_dedicated_transitions: false,+					is_archive: false,+				});+				if segment.id == "end"{+					song.has_end = true;+				}+				if segment.id != "loop" && REGEX_IS_LOOP.is_match(&segment.id) {+					song.has_multiple_loops = true;+				}+				if REGEX_IS_DEDICATED_TRANSITION.is_match(&segment.id) {+					song.has_dedicated_transitions = true;+				}+				if song.segments.contains_key(&segment.id.to_string()) {+					// Panic here, because having multiple files with the same ID is ambiguous+					panic!(format!("Found multiple segments with same ID: Song: {} Segment: {}", song.id, segment.id))+				}+				song.segments.entry(segment.id.to_string()).or_insert(segment);+			}+		    FileFormat::SongArchiveFormat => {+				let archive = ZipArchive::new(File::open(path).unwrap()).unwrap();+				let song_id = get_song_name(path.file_name().unwrap().to_str().unwrap());+				println!("Encountered Archive {}", song_id);+				let song = songs.entry(song_id.to_string()).or_insert(Song {+					id: song_id,+					segments: HashMap::<String, SongSegment>::new(),+					has_end: false,+					has_multiple_loops: false,+					has_dedicated_transitions: false,+					is_archive: true,+				});+				for segment_path in archive.file_names(){+					let segment_name = format!("song_archive_{}",segment_path);

Agree, as discussed in #8

cbondurant

comment created time in 5 days

Pull request review commentdyc3/stream-autodj

Add support for zipped song files

 mod test_song_segments { 		assert!(SongSegment { 			id: "end".to_string(), 			format:"wav".to_string(),-			allowed_transitions: set!()+			allowed_transitions: set!(), 		}.is_end());  		assert!(SongSegment { 			id: "loop0-end".to_string(), 			format:"wav".to_string(),-			allowed_transitions: set!()+			allowed_transitions: set!(), 		}.is_end()); 	} } +pub enum FileFormat {+	SegmentFormat,+	SongArchiveFormat,+	InvalidFormat+}++pub fn detect_file_type(path: &Path) -> FileFormat{+	let extension = path.file_name().unwrap().to_str().unwrap().split(".").last().unwrap();+	match extension{+		"wav"|"ogg"|"mp3"|"flac" => {FileFormat::SegmentFormat},+		"zip" => {FileFormat::SongArchiveFormat}+		_ => {FileFormat::InvalidFormat}+	}+}++pub fn get_song_name(file_name: &str) -> String {++	file_name.split("_").collect::<Vec<&str>>()[1].to_string().split(".").next().unwrap().to_owned()+}++pub fn parse_segment(file_name: &str) -> Option<SongSegment> {+	let mut name_split = file_name.split('_');+	if name_split.next().unwrap() != "song"{}+	let _ = name_split.next()?.to_string();+	let mut song_segment_split = name_split.next()?.split(".");+	let song_segment_id = song_segment_split.next().expect("File missing ID");+	let song_segment_format = song_segment_split.next().expect("Could not find file format");+	let segment = SongSegment {+		id: song_segment_id.to_string(),+		format:song_segment_format.to_string(),+		allowed_transitions: HashSet::<String>::new(),+		+	};+	Some(segment)+}+ pub fn initialize_songs<P: AsRef<Path>>(paths: &[P]) -> HashMap<String, Song> { 	let mut songs = HashMap::new(); 	for path in paths { 		let path = path.as_ref();-		let file_name = path.file_name().unwrap().to_str().unwrap().to_string();-		let name_split = file_name.split('_').collect::<Vec<_>>();-		let song_id = name_split[1].to_string();-		let song_segment_split = name_split[2].split(".").collect::<Vec<_>>();-		let song_segment_id = song_segment_split[0].to_string();-		let song_segment_format = song_segment_split[1].to_string();-		let song = songs.entry(song_id.clone()).or_insert(Song {-			id: song_id,-			segments: HashMap::<String, SongSegment>::new(),-			has_end: false,-			has_multiple_loops: false,-			has_dedicated_transitions: false-		});-		if !song.has_end && song_segment_id == "end"{-			song.has_end = true;-		}-		if !song.has_multiple_loops && song_segment_id != "loop" && REGEX_IS_LOOP.is_match(&song_segment_id) {-			song.has_multiple_loops = true;-		}-		if !song.has_dedicated_transitions && REGEX_IS_DEDICATED_TRANSITION.is_match(&song_segment_id) {-			song.has_dedicated_transitions = true;-		}-		if song.segments.contains_key(&song_segment_id) {-			// Panic here, because having multiple files with the same ID is ambiguous-			panic!(format!("Found multiple segments with same ID: Song: {} Segment: {}", song.id, song_segment_id))+		match detect_file_type(path){+			FileFormat::SegmentFormat => {+				let song_id = get_song_name(path.file_name().unwrap().to_str().unwrap());+				let segment = parse_segment(path.file_name().unwrap().to_str().unwrap()).unwrap();+				let song = songs.entry(song_id.to_string()).or_insert(Song {+					id: song_id,+					segments: HashMap::<String, SongSegment>::new(),+					has_end: false,+					has_multiple_loops: false,+					has_dedicated_transitions: false,+					is_archive: false,+				});+				if segment.id == "end"{+					song.has_end = true;+				}+				if segment.id != "loop" && REGEX_IS_LOOP.is_match(&segment.id) {+					song.has_multiple_loops = true;+				}+				if REGEX_IS_DEDICATED_TRANSITION.is_match(&segment.id) {+					song.has_dedicated_transitions = true;+				}+				if song.segments.contains_key(&segment.id.to_string()) {+					// Panic here, because having multiple files with the same ID is ambiguous+					panic!(format!("Found multiple segments with same ID: Song: {} Segment: {}", song.id, segment.id))+				}+				song.segments.entry(segment.id.to_string()).or_insert(segment);+			}+		    FileFormat::SongArchiveFormat => {+				let archive = ZipArchive::new(File::open(path).unwrap()).unwrap();+				let song_id = get_song_name(path.file_name().unwrap().to_str().unwrap());+				println!("Encountered Archive {}", song_id);+				let song = songs.entry(song_id.to_string()).or_insert(Song {+					id: song_id,+					segments: HashMap::<String, SongSegment>::new(),+					has_end: false,+					has_multiple_loops: false,+					has_dedicated_transitions: false,+					is_archive: true,+				});+				for segment_path in archive.file_names(){+					let segment_name = format!("song_archive_{}",segment_path);

If there are 2 songs in archive format, they will conflict.

					let segment_name = format!("song_{}_{}", song.id, segment_path);
cbondurant

comment created time in 5 days

pull request commentdyc3/stream-autodj

Add support for zipped song files

Using fmt changed like all the lines :/ Makes it kinda hard to merge with other people's stuff. I'm planning on fixing up style enforcement separately

cbondurant

comment created time in 5 days

issue commentdyc3/stream-autodj

Are we panicking too much?

Monday the 10th most likely

protheory8

comment created time in 5 days

issue commentdyc3/stream-autodj

Are we panicking too much?

Ok, then we should probably do something to fix up error handling then. We definitely panic in some places that are user error.

protheory8

comment created time in 5 days

Pull request review commentdyc3/stream-autodj

Add support for zipped song files

 mod test_song_segments { 		assert!(SongSegment { 			id: "end".to_string(), 			format:"wav".to_string(),-			allowed_transitions: set!()+			allowed_transitions: set!(), 		}.is_end());  		assert!(SongSegment { 			id: "loop0-end".to_string(), 			format:"wav".to_string(),-			allowed_transitions: set!()+			allowed_transitions: set!(), 		}.is_end()); 	} } +pub enum FileFormat {+	SegmentFormat,+	SongArchiveFormat,+	InvalidFormat+}++pub fn detect_file_type(path: &Path) -> FileFormat{+	let extension = path.file_name().unwrap().to_str().unwrap().split(".").last().unwrap();+	match extension{+		"wav"|"ogg"|"mp3"|"flac" => {FileFormat::SegmentFormat},+		"zip" => {FileFormat::SongArchiveFormat}+		_ => {FileFormat::InvalidFormat}+	}+}++pub fn get_song_name(file_name: &str) -> String {++	file_name.split("_").collect::<Vec<&str>>()[1].to_string().split(".").next().unwrap().to_owned()+}++pub fn parse_segment(file_name: &str) -> Option<SongSegment> {+	let mut name_split = file_name.split('_');+	if name_split.next().unwrap() != "song"{}+	let _ = name_split.next()?.to_string();+	let mut song_segment_split = name_split.next()?.split(".");+	let song_segment_id = song_segment_split.next().expect("File missing ID");+	let song_segment_format = song_segment_split.next().expect("Could not find file format");+	let segment = SongSegment {+		id: song_segment_id.to_string(),+		format:song_segment_format.to_string(),+		allowed_transitions: HashSet::<String>::new(),+		+	};+	Some(segment)+}+ pub fn initialize_songs<P: AsRef<Path>>(paths: &[P]) -> HashMap<String, Song> {+	// TODO: add file detection for mp3, flac, wav, and ogg

is this todo needed anymore?

cbondurant

comment created time in 5 days

Pull request review commentdyc3/stream-autodj

Add support for zipped song files

 mod test_song_parsing { 					id: "loop0".to_string(), 					format:"ogg".to_string(), 					allowed_transitions: HashSet::new(),+					

Avoid these extra empty newlines please

cbondurant

comment created time in 5 days

issue commentdyc3/stream-autodj

Are we panicking too much?

Ah ok. I tried using ? instead of unwrap in some places and the compiler didn't really like it because the function has to return Option or Result.

Regardless, I think that in general we don't panic unless for user error. For example, if this fails:

let current_segment = plan.last().unwrap();

then we can't continue making the plan anyway, and the conditions that led to panicking is a bug.

I suppose we could make failing to read song segments and failing to extract stuff from regexes a bit friendlier though.

protheory8

comment created time in 5 days

issue closeddyc3/opentogethertube

Mixer support

Requires #246

Support for watching mixer livestreams

React with 👍 if you are interested in this

closed time in 5 days

dyc3

issue commentdyc3/opentogethertube

Mixer support

Yeah, good catch.

dyc3

comment created time in 5 days

push eventdyc3/opentogethertube

Marius Becker

commit sha 5660e2d5581ef297e1c3bd0bb1df5aa3428febc8

Create Chat component

view details

Carson McManus

commit sha 9463fee6f45a334d3ebc99151977260c65d88d6b

Merge pull request #283 from Butt4cak3/chat-component Extract chat into its own component

view details

push time in 5 days

PR merged dyc3/opentogethertube

Extract chat into its own component client refactor

This pull request creates a Chat component to replace the chat logic inside the Room component. It's completely self-contained, so a simple <Chat /> is enough for it to work.

+105 -86

1 comment

2 changed files

Butt4cak3

pr closed time in 5 days

issue commentdyc3/stream-autodj

Are we using panic too much?

We only explicitly call panic when something goes stupid, a total of 2 times:

  1. If the planner makes a plan that is too long, panic because it shouldn't do that.
  2. If we encounter a segment in the same song with a duplicate id, panic because the user shouldn't do that.

The only one we should change, if anything, is the latter.

protheory8

comment created time in 5 days

startedidinium96/tf2autobot

started time in 5 days

pull request commentdyc3/stream-autodj

Add support for zipped song files

initialize_songs should not read from the file system at all if there are no zip files. It should take a list of paths, and output a HashMap<String, Song>. There should be a special handler for archives that we can test separately.

cbondurant

comment created time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha 94f4fbc96604327a7856295163b1cbbc72ad8cf9

update README

view details

Carson McManus

commit sha e8f10eda64c709f64e629b73ff1badb41d07e4f9

hacky fix for song_strategy

view details

push time in 5 days

pull request commentdyc3/stream-autodj

Add support for zipped song files

Don't change all the tests to read from the file system. They don't need to do that. The only test we need to have read from the file system is the one to test zipped songs.

cbondurant

comment created time in 5 days

push eventdyc3/opentogethertube

Marius Becker

commit sha d855d829b2ad927b868fe16b542f6addf2f46fbb

Create OmniPlayer component

view details

Marius Becker

commit sha 3060d57c65de923297211d119dc379fc0569c349

Fix inconsistent player heights and borders

view details

Marius Becker

commit sha 36d5c9ce6f63e6b8729e9f85d7936f311aeba922

Remove player borders

view details

Carson McManus

commit sha 5fa0a48e64d025386403971f1554b1bb7308b43a

Merge pull request #282 from Butt4cak3/omniplayer Extract video player into its own component

view details

push time in 5 days

PR merged dyc3/opentogethertube

Extract video player into its own component client refactor

This pull request creates a new component that I named "OmniPlayer" (let me know if you can come up with a better name) that abstracts away the different video services that OTT supports.

The Room component currently deals with differentiating between video services, which leads to a bunch of duplicated code.

Example: Before

     play() { 
       if (this.currentSource.service == "youtube") { 
         this.$refs.youtube.play(); 
       } 
       else if (this.currentSource.service === "vimeo") { 
         this.$refs.vimeo.play(); 
       } 
       else if (this.currentSource.service === "dailymotion") { 
         this.$refs.dailymotion.play(); 
       } 
       else if (this.currentSource.service === "googledrive") { 
         this.$refs.googledrive.play(); 
       } 
       else if (this.currentSource.service === "direct") { 
         this.$refs.direct.play(); 
       } 
     },

After

    play() {
      this.$refs.player.play();
    },
+140 -98

6 comments

4 changed files

Butt4cak3

pr closed time in 5 days

issue openeddyc3/stream-autodj

Song planner needs to be more controllable

Ideally, the song planner should guarantee that a plan won't ever get too long. After a plan reaches a certain length, it should stop picking transitions at random and start finding a direct route to the end, if applicable.

created time in 5 days

pull request commentdyc3/stream-autodj

Add support for zipped song files

The only strategy that comes to mind is to have a folder of minimum-size valid audio files

For our tests, the sound files can be empty. Reading and playing them is rodio's problem, not ours. We could just a have a really small zip to test to make sure it reads the list of segments correctly. Other tests can handle testing if everything else works.

some kind that would allow for building temporary file systems for tests

Sounds like a nightmare. Fuck that.

cbondurant

comment created time in 5 days

push eventdyc3/opentogethertube

Carson McManus

commit sha 5639ab0d1d24d433bedc6ed5f07ce7faeef8bf3c

fix travis condition for building docker image

view details

push time in 5 days

startedobsproject/obs-browser

started time in 5 days

pull request commentdyc3/opentogethertube

Extract video player into its own component

The dailymotion player isn't filling the space vertically. I believe there is some styles that need to be moved over to this component.

Butt4cak3

comment created time in 5 days

pull request commentdyc3/opentogethertube

Extract video player into its own component

roommanager heavily relies on knowing the duration of the video in order to know when to switch to the next video. If you don't have a youtube API key, then it can't use the youtube api. It may fail to web scrape the video length from the page. Open db/dev.sqlite and check the CachedVideos table to see if length is greater than 0.

Butt4cak3

comment created time in 5 days

push eventdyc3/stream-autodj

Carson McManus

commit sha 6e25f3588bb1dc39429f16a0686bef5750069ccb

remove commented code

view details

push time in 5 days

issue commentdyc3/opentogethertube

Split the room view into smaller components

The video player and chat probably make the most sense to move to their own components. I don't think it would make a lot of sense to make the video queue and search parts into their own components, because most of their functionality is handled by VideoQueueItem. User list would probably be fine to seperate, but idk. I don't think the invite box will ever be used in another location, nor big enough to warrant being moved to a separate component.

Butt4cak3

comment created time in 5 days

more