2013-07-30 17 views
7

Làm cách nào tôi có thể làm việc nếu Itunes: Preferences: Nâng cao: Giữ Thư mục iTunes Tổ chức được đặt theo lập trình trên Windows, ứng dụng Java của tôi tương tác với iTunes cần biết điều này.Tôi có thể làm việc như thế nào nếu Itunes: Giữ thư mục iTunes được tổ chức được đặt theo chương trình trên Windows

Thật không may là tệp iTunes xml hoặc API Itunes COM dường như cung cấp thông tin này, tôi giả sử vì chúng là tùy chọn được lưu trữ ở nơi khác, nhưng làm cách nào để tìm hiểu xem có được bật hay không, tôi cũng cần biết điều này cho sao chép tập tin vào iTunes Media thư mục khi thêm vào thư viện

cập nhật: Không có gì trong registry nhưng Ive tìm thấy một sở thích nộp

C: \ Users \ username \ AppData \ Roaming \ Apple Computer \ iTunes

tuy nhiên có vẻ như được mã hóa/mã hóa, tôi không biết làm thế nào để đọc các giá trị

Cập nhật 2:

lưu một bản sao của tập tin, thay đổi giá trị của Copy files cho iTunes Media Thư mục khi thêm vào thư viện và so sánh và đã nhặt một sự thay đổi

<key>Documents:132</key> 
<data> 
AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV09SQjQAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADUXX4fAc2UWH8BAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= 
</data> 

so

<key>Documents:132</key> 
<data> 
AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV09SQjQAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAACwf6jgsOrUhX8BAAAAAAAA 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= 
</data> 

nhưng như bạn có thể thấy khó khăn để phát hiện sự khác biệt, và Id được quan tâm nếu tôi tấn công valkue này nó có thể phá vỡ giữa các phiên bản iTunes, là có cách nào để giải mã tập tin này?

Cập nhật 3

tôi thấy rằng Apache Commons Configuration hỗ trợ định dạng Táo plist như là định dạng Xml http://commons.apache.org/proper/commons-configuration/apidocs/org/apache/commons/configuration/plist/XMLPropertyListConfiguration.html nhưng không tiếc là định dạng nhị phân sử dụng ở đây.

Tôi đã viết mã này liệt kê tất cả các khóa và sau đó cố gắng giải mã thuộc tính vị trí vì tôi biết điều này chỉ chứa một tệp dữ liệu bộ mã hóa base64 duy nhất.

public File getITunesXMLFile() 
    { 
     String homedir = System.getProperty("user.home"); 

     File prefsFile = new File(homedir,"AppData/Roaming/Apple Computer/iTunes/iTunesPrefs.xml"); 
     try 
     { 
      XMLPropertyListConfiguration xpc = new XMLPropertyListConfiguration(prefsFile); 
      xpc.load(); 
      Iterator<String> keys = xpc.getKeys(); 
      while(keys.hasNext()) 
      { 
       String nextKey = keys.next(); 
       System.out.println(nextKey+":"+xpc.getProperty(nextKey).getClass()); 
      } 
      ArrayList location = (ArrayList)xpc.getProperty("User Preferences.iTunes Library XML Location:1"); 
      System.out.println("Location:"+location.get(0).getClass()); 
      System.out.println("Location:"+location.get(1).getClass()); 

      System.out.println("Location1:"+ new BASE64Decoder().decodeBuffer(location.get(0).toString())); 
      System.out.println("Location2:"+ new BASE64Decoder().decodeBuffer(location.get(1).toString())); 
     } 
     catch(Exception ex) 
     { 
      MainWindow.logger.log(Level.SEVERE,"Unable to open iTunes Prefs file:"+prefsFile.getName(),ex); 
     } 
     File xmlFile = new File(homedir + "/Music/iTunes/iTunes Music Library.xml"); 
     if (!xmlFile.exists()) 
     { 
      return null; 
     } 
     return xmlFile; 
    } 

nhưng tiếc là không hoạt động khi dữ liệu được trả về dưới dạng ArrayList của một loại kiểu [B, điều này không có ý nghĩa với tôi, nó không phải là tên hợp lệ cho một lớp.

Output là

EQ Preferences.EQPresets:129:class java.util.ArrayList 
User Preferences.Documents:132:class java.util.ArrayList 
User Preferences.Gracenote User ID:1:class java.util.ArrayList 
User Preferences.Music Store:1:class java.util.ArrayList 
User Preferences.Pairing Preferences:301:class java.util.ArrayList 
User Preferences.Preferences:130:class java.util.ArrayList 
User Preferences.Radio Tuner Categories:131:class java.util.ArrayList 
User Preferences.Touch Remote Preferences:400:class java.util.ArrayList 
User Preferences.iTunes Library XML Location:1:class java.util.ArrayList 
User Preferences.iTunes..exe:AAC Encoder:class java.util.ArrayList 
User Preferences.iTunes..exe:iTunes Classic Visualiser:class java.util.ArrayList 
User Preferences.license-agreements.EA0962:class java.util.ArrayList 
User Preferences.storefront:class java.util.ArrayList 
Location:class [B 
Location:class [B 
Location1:[[email protected] 
Location2:[[email protected] 
+++++++++++++++++++++++++++++++++++++++++++++++ 

và cũng phát hiện vấn đề này https://issues.apache.org/jira/browse/CONFIGURATION-262

Cập nhật 4

Tìm thấy một thư viện mà đã hỗ trợ code.google.com/p/plist nhị phân trông hy vọng

Cập nhật 5

Tôi đã quản lý để sử dụng thư viện này để giải mã vị trí tệp Xml như sau (lớp Base64 từ Apache Commons Codec 1.8)

public File getITunesXMLFile() 
    { 
     System.getProperties().list(System.out); 
     String homedir = System.getProperty("user.home"); 
     File prefsFile = new File(homedir,"AppData/Roaming/Apple Computer/iTunes/iTunesPrefs.xml"); 
     File xmlFile; 
     try 
     { 
      NSDictionary rootDict = (NSDictionary) PropertyListParser.parse(prefsFile); 
      NSDictionary userPrefs = (NSDictionary) rootDict.objectForKey("User Preferences"); 
      if(userPrefs!=null) 
      { 
       NSData iTunesLocation = (NSData) userPrefs.objectForKey("iTunes Library XML Location:1"); 
       if(iTunesLocation!=null) 
       { 
        String base64 = iTunesLocation.getBase64EncodedData(); 
        String filepath = new String(Base64.decodeBase64(base64),"UTF-16LE"); 
        xmlFile = new File(filepath); 
        System.out.println(filepath+":File Exists:"+xmlFile.exists()); 
        if (xmlFile.exists()) 
        { 
         return xmlFile; 
        } 
       } 
      } 
     } 
     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
      //Use default then 
      xmlFile = new File(homedir + "/Music/iTunes/iTunes Music Library.xml"); 
      if (xmlFile.exists()) 
      { 
       return xmlFile; 
      } 
     } 
     return null; 
    } 

Cập nhật 6

Tôi cố gắng để làm điều này cho các dữ liệu tôi đã thực sự quan tâm, tôi có thể trích xuất các dữ liệu base64encoded từ các tài liệu: 132 chìa khóa, nhưng tiếc là cố gắng giải mã base64encoding này không thực sự đưa tôi đến bất cứ nơi nào, có lẽ tôi sẽ chỉ cần tìm sự khác biệt trong dữ liệu base64encoded khi cờ được kích hoạt/vô hiệu hóa.

public boolean isiTunesCopyFolderToMediaFolder() 
    { 
     String homedir = System.getProperty("user.home"); 
     File prefsFile = new File(homedir,"AppData/Roaming/Apple Computer/iTunes/iTunesPrefs.xml"); 
     try 
     { 
      NSDictionary rootDict = (NSDictionary) PropertyListParser.parse(prefsFile); 
      NSDictionary userPrefs = (NSDictionary) rootDict.objectForKey("User Preferences"); 
      if(userPrefs!=null) 
      { 
       NSData options = (NSData) userPrefs.objectForKey("Documents:132"); 
       if(options!=null) 
       { 
        String base64 = options.getBase64EncodedData(); 
        System.out.println("optionBase54Data:"+base64); 
        String optionData = new String(Base64.decodeBase64(base64)); 
        System.out.println("optionData:"+optionData); 
        return true; 
       } 
      } 
     } 
     catch(Exception ex) 
     { 
      ex.printStackTrace(); 
     } 
     return false; 
    } 

đầu ra chủ yếu là không gian (AAAA của)

optionBase54Data: AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV09SQjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAADUXX4fAc2UWH8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA =

cộng nhúng trong đầu ra

WORB4

] ~ X

Một ví dụ về các ưu đãi file iTunes có thể được tìm thấy ở đây

http://www.jthink.net/jaikoz/scratch/iTunesPrefs.xml

+0

Bạn đã xem qua sổ đăng ký chưa? – Floris

+0

Hiện tại, không có gì trong sổ đăng ký nhưng tôi nghĩ rằng Ive đã tìm thấy các tùy chọn –

+0

Một hack: lưu một bản sao của tệp, thay đổi cài đặt ưu tiên (bỏ chọn hộp "Giữ tổ chức"), lưu một bản sao thứ hai, thực hiện khác .. có thể bạn có thể thấy sự khác biệt? – Floris

Trả lời

0

tôi đã sao chép iTunesPrefs.xml với các thiết lập và tắt sau đó so sánh sự khác biệt.

Với nó kiểm tra (true)

Base64 mã hóa: AAIAAAAAAAEAAAAGAQAA ///// wEAAHoAAP //// 8EAEYAbABhAHQAAAAAAAAA

Hex giá trị: 02 01 06 01 01 7a 04 46 6c 61 74

Với nó không được chọn (false)

Base64 mã hóa: AAIAAAAAAAEAAAAGAQAA ///// wEAAHsAAP //// 8EAEYAbABhAHQAAAAAAAAA

giá trị Hex: 02 01 06 01 01 7b 04 46 6c 61 74

này được chứa dưới Preferences: 130, làm thế nào những giá trị đang được lưu trữ Tôi không biết, có thể bạn có thể tìm thấy một cái gì đó về vấn đề này. Xem xét sử dụng dòng lệnh để tìm sự khác biệt trong tệp, diff cho linux hoặc fc cho cửa sổ.

Tôi biết đây không phải là câu trả lời nhưng điều này sẽ không phù hợp trong nhận xét.

Các vấn đề liên quan