Esempio n. 1
0
        /// <summary>
        /// Creates a timer to release the iTunes library after so many minutes of inactivity
        /// </summary>
        /// <param name="maximumMinutes"></param>
        private static void LibraryTimer(int maximumMinutes)
        {
            Timer timer = new Timer(60 * 1000.0)
            {
                AutoReset = true
            };

            timer.Elapsed += (sender, e) =>
            {
                lock (syncRoot)
                {
                    idleTimer++;
                    if (idleTimer >= maximumMinutes)
                    {
                        if (library != null)
                        {
                            library.Quit();
                        }
                        library = null;
                        timer.Stop();
                        timer.Dispose();
                        timer = null;
                    }
                }
            };
            timer.Start();
        }
        private void CloseITunes()
        {
            while (ReadyForSync == null)
            {
                ;                                      // Wait if still opening iTunes before trying to close
            }
            ReadyForSync = false;

            if (Device.DeviceName != null)
            {
                Device.DeviceName = null;
                // Tell MusicBee to call Eject()
                Plugin.MbApiInterface.MB_SendNotification(Plugin.CallbackType.StorageEject);
            }

            if (iTunes != null)
            {
                try
                {
                    iTunes.Quit();
                }
                catch (Exception x)
                {
                    Trace.WriteLine(x);
                }
                Marshal.ReleaseComObject(iTunes);
                iTunes = null;
            }

            OpenMenu.Enabled = true;
        }
Esempio n. 3
0
        /// <summary>
        /// Dispose of this instance, optionally exiting iTunes.
        /// </summary>
        /// <param name="finalRelease"><b>true</b> to exit iTunes.</param>

        public void Dispose(bool finalRelease)
        {
            if (!isDisposed)
            {
                // invoke Cleanup on behalf of the derived class
                Cleanup(finalRelease);

                if (isPrimaryController)
                {
                    isConnected = false;

                    if (itunes != null)
                    {
                        try
                        {
                            itunes.OnCOMCallsDisabledEvent -= disabledEvent;
                            itunes.OnCOMCallsEnabledEvent  -= enabledEvent;
                        }
                        catch (InvalidComObjectException)
                        {
                            // RCW may be released already... why?
                        }

                        disabledEvent = null;
                        enabledEvent  = null;

                        if (finalRelease)
                        {
                            try
                            {
                                itunes.Quit();
                            }
                            catch
                            {
                                // no-op
                            }
                            finally
                            {
                                Release(itunes);
                                itunes = null;
                            }
                        }

                        reset.Set();
                        reset.Close();
                        reset = null;
                    }
                }

                isDisposed = true;
                GC.SuppressFinalize(this);
            }
        }
Esempio n. 4
0
 private void Dispose(bool disposing)
 {
     if (!disposing)
     {
         return;
     }
     try
     {
         _itunes.Quit();
     }
     catch
     {
         Debug.Write("Unable to quit iTunes while disposing.");
     }
     finally
     {
         Marshal.ReleaseComObject(_itunes);
     }
 }
Esempio n. 5
0
        /// <summary>
        /// Adds a file to the iTunes library
        /// </summary>
        /// <param name="filePath">File path and name</param>
        /// <returns>True if successful, false if unable to add</returns>
        public static bool AddFileToiTunesLibrary(string filePath, Log jobLog)
        {
            iTunesApp iTunes = null;

            jobLog.WriteEntry("About to add " + filePath + " to the iTunes library", Log.LogEntryType.Debug);

            try
            {
                iTunes = new iTunesApp(); // Create a new iTunes object
                iTunes.Windows[1].Minimized = true; // Minimize the window
                IITLibraryPlaylist iTunesLibrary = iTunes.LibraryPlaylist;

                IITOperationStatus libStatus = iTunesLibrary.AddFile(filePath);
                if (libStatus == null)
                    jobLog.WriteEntry("WARNING: Unsupported file type, file NOT added to iTunes library", Log.LogEntryType.Warning);
                else
                {
                    int counter = 0;
                    while (libStatus.InProgress && (++counter < 200))
                        Thread.Sleep(300); // Wait upto 60 seconds for iTunes to finish

                    if (libStatus.InProgress)
                        jobLog.WriteEntry("iTunes add to library still in progress, iTunes may have hung", Log.LogEntryType.Warning);
                    else
                        jobLog.WriteEntry("Added " + filePath + " successfully to the iTunes library", Log.LogEntryType.Information);
                }

                // Release the COM object and clean up otherwise it hangs later
                iTunes.Quit(); // Close the app
                Marshal.FinalReleaseComObject(iTunes);
                iTunes = null;
                return true;
            }
            catch (Exception e)
            {
                jobLog.WriteEntry("ERROR: Unable to communicate with iTunes Library, iTunes may not be installed. File not added to the iTunes library.\r\nError : " + e.ToString(), Log.LogEntryType.Error);

                // Release the COM object
                if (iTunes != null)
                {
                    iTunes.Quit(); // Close the app
                    Marshal.FinalReleaseComObject(iTunes);
                    iTunes = null;
                }

                return false;
            }
        }
Esempio n. 6
0
        private static void createPlaylist()
        {
            try
            {
                iTunesApp app = new iTunesApp();

                app.ForceToForegroundOnDialog = true;

                //app.SetOptions(); would be nice to kill autoarrange

                IITPlaylistCollection pl       = app.LibrarySource.Playlists;
                IITUserPlaylist       playlist = null;

                playlist = findPlaylist(pl, playlist);

                if (playlist == null)
                {
                    playlist = (IITUserPlaylist)app.CreatePlaylist(playlistName);
                }
                else
                {
                    // remove tracks, how?
                    foreach (IITTrack t in playlist.Tracks)
                    {
                        //t.Delete(); <== ?
                    }
                }

                iTunesLib.IITLibraryPlaylist lp = app.LibraryPlaylist;

                IITTrackCollection itTracks = app.LibraryPlaylist.Tracks;

                Dictionary <string, int> libraryTrackDictionary = new Dictionary <string, int>(StringComparer.OrdinalIgnoreCase);
                List <string>            libraryTrackFiles      = new List <string>();

                foreach (IITTrack t in itTracks)
                {
                    if (Cancel)
                    {
                        break;
                    }

                    if (t.Kind == ITTrackKind.ITTrackKindFile)
                    {
                        string l = (t as IITFileOrCDTrack).Location;
                        if (l != null)
                        {
                            libraryTrackFiles.Add(l);
                            if (!libraryTrackDictionary.ContainsKey(l))
                            {
                                libraryTrackDictionary.Add(l, t.Index);
                            }
                        }
                    }
                }
                List <string> allTracks = new List <string>();
                foreach (Track t in tracks)
                {
                    allTracks.Add(t.FilePath);
                }

                object oo = (object)(allTracks.ToArray());
                playlist.AddFiles(ref oo);

                Controller.ShowMessage("Completed sending playlist to iTunes.");

                app.Quit();
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.ToString());
                Clock.DoOnMainThread(ShowError);
            }
            Busy = false;
        }
Esempio n. 7
0
        private void initRecognizer()
        {
            mRecognizerRule = new SpeechLib.SpInProcRecoContext();
            bool hit = false;

            foreach (SpObjectToken recoPerson in mRecognizerRule.Recognizer.GetRecognizers())
            {
                if (recoPerson.GetAttribute("Language") == "411")
                {
                    mRecognizerRule.Recognizer.Recognizer = recoPerson;
                    hit = true;
                    break;
                }
            }
            if (!hit)
            {
                MessageBox.Show("日本語認識が利用できません");
                Application.Exit();
            }

            mRecognizerRule.Recognizer.AudioInput = createMicrofon();

            if (mRecognizerRule.Recognizer.AudioInput == null)
            {
                MessageBox.Show("マイク初期化エラー");
                Application.Exit();
            }

            mRecognizerRule.Hypothesis +=
                delegate(int streamNumber, object streamPosition, SpeechLib.ISpeechRecoResult result)
            {
                string strText = result.PhraseInfo.GetText();
                textBox1.Text = strText;
            };
            mRecognizerRule.Recognition +=
                delegate(int streamNumber, object streamPosition, SpeechLib.SpeechRecognitionType srt, SpeechLib.ISpeechRecoResult isrr)
            {
                SpeechEngineConfidence confidence = isrr.PhraseInfo.Rule.Confidence;
                switch (confidence)
                {
                case SpeechEngineConfidence.SECHighConfidence:
                    label3.Text = "Confidence is High";
                    break;

                case SpeechEngineConfidence.SECNormalConfidence:
                    label3.Text = "Confidence is Normal";
                    break;

                case SpeechEngineConfidence.SECLowConfidence:
                    label3.Text   = "Confidence is Low";
                    textBox2.Text = "信頼性が低すぎます";
                    return;
                }
                string strText = isrr.PhraseInfo.GetText();
                //isrr.PhraseInfo.
                label4.Text = isrr.RecoContext.Voice.Volume.ToString();
                if (strText == "えんいー")
                {
                    Application.Exit();
                }

                if (itunes != null)
                {
                    switch (strText)
                    {
                    case "あいちゅーんず.つぎのきょく":
                    case "あいちゅーんず.つぎ":
                        itunes.NextTrack();
                        break;

                    case "あいちゅーんず.まえのきょく":
                    case "あいちゅーんず.まえ":
                        itunes.PreviousTrack();
                        break;

                    case "あいちゅーんず.いちじていし":
                        itunes.Pause();
                        break;

                    case "あいちゅーんず.ていし":
                        itunes.Stop();
                        break;

                    case "あいちゅーんず.さいせい":
                        itunes.Play();
                        break;

                    case "あいちゅーんず.しね":
                        itunes.Quit();
                        unhockiTunes();
                        break;

                    case "あいちゅーんず.しずかに":
                        itunes.SoundVolume = 50;
                        break;

                    case "あいちゅーんず.おおきく":
                        itunes.SoundVolume = 100;
                        break;

                    case "あいちゅーんず.らんだむ":
                        itunes.CurrentPlaylist.Shuffle = !itunes.CurrentPlaylist.Shuffle;
                        break;
                    }
                }
                else
                {
                    if (strText == "あいちゅーんず.おきろ")
                    {
                        initiTunes();
                    }
                }
                textBox2.Text = strText;
            };
            mRecognizerRule.StartStream +=
                delegate(int streamNumber, object streamPosition)
            {
                textBox1.Text = textBox2.Text = "";
            };
            mRecognizerRule.FalseRecognition +=
                delegate(int streamNumber, object streamPosition, SpeechLib.ISpeechRecoResult isrr)
            {
                textBox1.Text = textBox2.Text = label3.Text = "--Error!--";
            };

            mRecognizerGrammarRule = mRecognizerRule.CreateGrammar();
            mRecognizerGrammarRule.Reset();
            mRecognizerGrammarRuleGrammarRule = mRecognizerGrammarRule.Rules.Add("TopLevelRule", SpeechRuleAttributes.SRATopLevel | SpeechRuleAttributes.SRADynamic);

            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.おきろ");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.つぎのきょく");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.まえのきょく");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.つぎ");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.まえ");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.いちじていし");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.ていし");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.さいせい");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.しね");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.しずかに");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.おおきく");
            mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "あいちゅーんず.らんだむ");
            // mRecognizerGrammarRuleGrammarRule.InitialState.AddWordTransition(null, "えんいー");

            mRecognizerGrammarRule.Rules.Commit();
            mRecognizerGrammarRule.CmdSetRuleState("TopLevelRule", SpeechRuleState.SGDSActive);
        }