private void AddUser(string modelName, bool quickStart = false) { // Normalising name modelName = NormaliseModelName(modelName).ToLower(); // Checking input validity if (string.IsNullOrWhiteSpace(modelName)) { // MessageBox.Show(this, "Invalid model name, cannot be empty or whitespace.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } Logger.Log(modelName, "Added"); // Checking if the model is already being listened to if (modelsBox.Items.Cast <object>().Contains(modelName)) { return; // TODO restart stream instead } // Create process and add listener to lists LivestreamerProcess proc = new LivestreamerProcess(this, modelName); modelsBox.Items.Add(modelName); _listeners.AddOrUpdate(modelName, proc, (s, listener) => listener); // Quick start functionality (i.e. start listener immediately) proc.Start(quickStart); }
private void removeMenuItem_Click(object sender, EventArgs e) { int idx = modelsBox.SelectedIndex; // Validating item if (idx == -1) { return; } string modelName = modelsBox.Items[idx].ToString(); // Fetching process LivestreamerProcess listener = _listeners[modelName]; // Initiating termination listener.Terminate(); // Removing listener from lists modelsBox.Items.RemoveAt(idx); LivestreamerProcess output; _listeners.TryRemove(modelName, out output); Logger.Log(modelName, "Remove"); }
private void removeAllUncheckedToolStripMenuItem_Click_1(object sender, EventArgs e) { // Gather IDs ArrayList modelIds = new ArrayList(); for (int i = 0; i < modelsBox.Items.Count; i++) { if (modelsBox.GetItemCheckState(i) == CheckState.Unchecked) { modelIds.Add(i); } } // Reverse so we start at the end, or as we remove elements the indexes will be incorrect modelIds.Reverse(); // Batch remove foreach (int id in modelIds) { string modelName = modelsBox.Items[id].ToString(); // Fetching process LivestreamerProcess listener = _listeners[modelName]; // Initiating termination listener.Terminate(); // Removing listener from lists modelsBox.Items.RemoveAt(id); LivestreamerProcess output; _listeners.TryRemove(modelName, out output); Logger.Log(modelName, "Remove all unchecked"); } }
private void ListenerProcess() { while (true) { Thread.Sleep(ListenerSleepDelay); // Skip iteration if no listeners are attached if (_listeners.Count == 0) { continue; } // Update cached time TimeNow = DateTime.Now; // Handling each listener foreach (KeyValuePair <string, LivestreamerProcess> valuePair in _listeners) { string modelName = valuePair.Key; LivestreamerProcess proc = valuePair.Value; // Checking if a (re)start is required if (proc.CanRestart) { proc.Start(); } } } }
public void AddModel(string modelName, bool immediate = false) { // Normalising name modelName = NormaliseModelName(modelName).ToLower(); // Check input validity if (string.IsNullOrWhiteSpace(modelName)) { return; } // Check if the model is already being listened to if (_models.Contains(modelName)) { return; } // Create process and add listener to lists IDownloaderProcess process = new LivestreamerProcess(_parent, modelName); _models.AddModel(modelName); _listeners.AddOrUpdate(modelName, process, (s, listener) => listener); // Quick start functionality (i.e. start listener immediately) process.Start(immediate); Log.Info($"Added {modelName}"); }
public void RemoveInvalidUrlModel(string modelName, LivestreamerProcess proc) { // Telling user URL was invalid Invoke((MethodInvoker)(() => MessageBox.Show(this, "Unregistered model detected: " + modelName, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation))); // Removing from listeners if (_manager.RemoveModel(modelName)) { // Removing from UI modelsBox.Invoke((MethodInvoker)(() => modelsBox.Items.Remove(modelName))); } }
private void restartToolStripMenuItem_Click(object sender, EventArgs e) { string modelName = GetSelectedModelName(); if (modelName == null) { return; } // Fetching process LivestreamerProcess listener = _listeners[modelName]; // Cancel restart if the listener is already running if (listener.Running) { return; } // Otherwise, continue with the manual start listener.Start(true); Logger.Log(modelName, "Manual restart"); }
private void MainForm_FormClosing(object sender, FormClosingEventArgs e) { // Asking user to confirm action if (_listeners.Count > 0 && MessageBox.Show(this, "Are you sure you want to quit, all active streams being listened to will be terminated.", "Warning", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.Cancel) { e.Cancel = true; return; } // Terminating manager thread if (_listenerThread.IsAlive) { try { _listenerThread.Abort(); } catch (ThreadAbortException) { } } // Terminating operational threads/process foreach (KeyValuePair <string, LivestreamerProcess> valuePair in _listeners) { // Fetching listener string modelName = valuePair.Key; LivestreamerProcess listener = valuePair.Value; // Initiating termination listener.Terminate(); // Removing listener from list LivestreamerProcess output; _listeners.TryRemove(modelName, out output); } }