Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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");
        }
Exemplo n.º 3
0
        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");
            }
        }
Exemplo n.º 4
0
        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();
                    }
                }
            }
        }
Exemplo n.º 5
0
        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}");
        }
Exemplo n.º 6
0
        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)));
            }
        }
Exemplo n.º 7
0
        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");
        }
Exemplo n.º 8
0
        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);
            }
        }